Download Game! Currently 117 players. Last logged in:VerenSpannAtleticoJumadan

Blitzer's Blog >> 72916

Back to blogs index
Posted: 03 Oct 2026 19:20 [ permalink ]
TC$mC$ ratkaistaan rakentamalla verkkoon Asynkroninen OOB-Silta
(Store-and-Forward Proxy).
Koska meidC$n Mesh-verkkomme ydin perustuu jo valmiiksi tC$ysin asynkroniseen
viestinvC$litykseen (MeshRPC:n reqId ja pendingRequests -kartta) ja
JSON-paketteihin, verkon ei tarvitse tietC$C$, siirtyykC6 paketti TCP-sokettia
pitkin mikrosekunnissa vai kuljetetaanko se USB-tikulla fyysisen ilmaraon yli
kerran pC$ivC$ssC$.
TC$ssC$ on arkkitehtuuri ja toteutusmalli sille, miten airgap-laitteet ja
tuntemattomat protokollat integroidaan osaksi olemassa olevaa verkkoa.
1. Ydinkonsepti: OMEGA-tyylinen Virtuaalireititys
Airgap-laitteella ei ole dynaamista verkko-osoitetta. Siksi osoitteistus
ratkaistaan Virtuaalisilla Target ID:illC$.
 * Annat airgap-laitteelle staattisen nimen, esim. targetId: "airgap-vault-1".
 * Mesh-verkossa (esim. AlphaGatewaylla) pyC6rii uusi vC$lityspalvelin, OOB
Bridge Node.
 * Silta ilmoittaa verkolle reitityssC$C$nnC6n: "MinC$ otan vastaan kaikki
viestit, joiden kohde on airgap-vault-1."
 * Kun silta saa viestin, se katkaisee normaalin verkkoprotokollan,
sarjallistaa JSON-paketin ja siirtC$C$ sen fyysiseen tai loogiseen
In/Out-postilaatikkoon.
2. Prototyyppi: In/Out Mailbox Silta (TiedostojC$rjestelmC$)
Jos ilmaraon ylitys tapahtuu jaetun kansion, virtuaalisen tiedostojC$rjestelmC$
n (esim. MeshFS-tyyppisen ratkaisun) tai verkkolevyn kautta, silta on
C$C$rimmC$isen yksinkertainen.
TC$ssC$ on konseptuaalinen oob_bridge.js, joka liittC$C$ hakemistopohjaisen
postilaatikon suoraan meidC$n HybridMeshNode -runkoon:
import fs from 'fs';
import path from 'path';
import { HybridMeshNode } from './mesh.js';

const INBOX_DIR = path.resolve('./airgap_inbox');   // Airgap-koneen
kirjoittamat vastaukset
const OUTBOX_DIR = path.resolve('./airgap_outbox'); // MeshistC$ Airgapille
lC$htevC$t pyynnC6t

/ Varmistetaan hakemistot
[INBOX_DIR, OUTBOX_DIR].forEach(d => { if (!fs.existsSync(d)) fs.mkdirSync(d,
{ recursive: true }); });

const bridgeNode = new HybridMeshNode("OOB_File_Bridge");

async function main() {
    await bridgeNode.start();
    console.log("[OOB Bridge] KC$ynnissC$. Tarkkaillaan postilaatikoita...");

    // 1. MESH -> AIRGAP (Kuunnellaan Mesh-verkkoa)
    for await (const msg of bridgeNode.inbox) {
        // Otetaan kiinni vain ne viestit, jotka on osoitettu
airgap-laitteille
        if (msg.targetId === "airgap-vault-1") {
            const fileName = `msg_${msg.msgId}_${Date.now()}.json`;
            const filePath = path.join(OUTBOX_DIR, fileName);
            
            // Kirjoitetaan raaka Mesh-viestitaulukko tiedostoksi
postilaatikkoon
            fs.writeFileSync(filePath, JSON.stringify([
                msg.version, msg.type, msg.msgId, msg.senderId, msg.targetId,
msg.ttl, msg.tags, msg.payload
            ]));
            console.log(`[OOB Bridge] Viesti reititetty Outboxiin:
${fileName}`);
        }
    }
}

/ 2. AIRGAP -> MESH (Pollaataan Inboxia vastausten varalta)
setInterval(() => {
    const files = fs.readdirSync(INBOX_DIR);
    for (const file of files) {
        if (file.endsWith('.json')) {
            const filePath = path.join(INBOX_DIR, file);
            try {
                const rawData = fs.readFileSync(filePath, 'utf8');
                
                // SyC6tetC$C$n airgap-laitteen kirjoittama vastaus takaisin
Mesh-verkon ytimeen!
                // TC$mC$ triggerC6i normaalin Flooding/Gossip -reitityksen
takaisin alkuperC$iselle kysyjC$lle.
                bridgeNode._handleIncoming(rawData, null, 'OOB');
                
                // Arkistoidaan tai poistetaan kC$sitelty viesti
                fs.unlinkSync(filePath);
                console.log(`[OOB Bridge] Vastaus luettu Inboxista ja
injektoitu Meshiin: ${file}`);
            } catch (err) {
                console.error(`Virhe luettaessa OOB-tiedostoa ${file}:`,
err.message);
            }
        }
    }
}, 5000); // PollausvC$li 5 sekuntia

main();

3. Airgap-Noden logiikka (Tuntemattoman rajan takana)
Airgap-koneessa pyC6rivC$ ohjelmisto ei tarvitse TCP/UDP-soketteja eikC$
mesh.js -verkkokerrosta lainkaan. Sille riittC$C$ pelkkC$ liiketoimintalogiikka
 ja kyky lukea/kirjoittaa JSON-tiedostoja.
Sen tyC6kierto on:
 * Skannaa airgap_outbox -kansiota (joka on sille Inbox).
 * Kun uusi tiedosto ilmestyy, pura JSON.
 * Jos tags sisC$ltC$C$ ["api"] ja endpoint on tunnettu, suorita rutiini
(esim. lue salainen tiedosto, tee kryptografinen allekirjoitus).
 * Kirjoita tulos airgap_inbox -kansioon alkuperC$isellC$ msgId:llC$ ja
["api-res"] -tagilla varustettuna.
 * Poista alkuperC$inen pyyntC6tiedosto.
Laajennettavuus muihin OOB-protokolliin
TC$mC$ sama Proxy/Router-prototyyppi mukautuu triviaalisti mihin tahansa
siirtotiehen ilman, ettC$ Mesh-verkon muiden solmujen koodia tarvitsee muuttaa
tavuakaan:
 * Yksisuuntaiset sarjakaapelit (Unidirectional Serial): Jos rakennat
serial-to-IRC -tyyppisen sillan, OOB Bridge avaa /dev/ttyUSB0 portin.
fs.writeFileSync korvautuu serialPort.write(JSON) -kutsulla. Airgap-kone lukee
sarjaportin puskuria.
 * SC$hkC6posti / IRC-kanavat: Bridge-node voi kC$yttC$C$ IRC-bottia tai
IMAP-sC$hkC6postilaatikkoa transporttina. Base64-koodattu Mesh-paketti
lC$hetetC$C$n yksityisviestinC$ kanavalle, josta airgap-verkon puolella oleva
vastaanotin lukee sen.
 * Irrotettavat mediat (USB Dead Drops): Bridge-node havaitsee, kun /media/usb
liitetC$C$n (mount). Se siirtC$C$ kaikki jonossa olevat Mesh-viestit tikulle
ja lukee tikulla olevat vastaukset sisC$C$n. Tikun siirto fyysisesti
airgap-koneeseen on verkon nC$kC6kulmasta vain "verkkolatenssia", jota MeshRPC
sietC$C$ loistavasti, kunhan selaimen tai backendin asettama timeout on
konfiguroitu riittC$vC$n pitkC$ksi (esim. 24 tuntia).
Mesh-arkkitehtuurisi "viestin id ja asynkroninen kuitti" -malli tekee tC$stC$
saumatonta. LC$hettC$jC$ vain kutsuu meshFetch("airgap-vault-1/get_keys"), ja
Promise resolvaa joko millisekuntien, minuuttien tai pC$ivien kuluttua
riippuen siitC$, milloin In/Out-postilaatikko synkronoidaan.