Megjelent az Ad Nihilum 0.4.3 — egy minimalista szolgáltatás titkosított üzenetek cseréjére a „olvastam — elégettem” elv alapján, amely elsősorban a saját hosztolásra összpontosít.
A szerver csupán egy zárt tárolóként működik. A titkosítás és a visszafejtés kizárólag az ügyfél oldalán, a böngészőben történik (AES-GCM használatával).
Jellemzők
- helyi titkosítás és visszafejtés, szerver soha nem látja a kulcsot;
- további titkosítási réteg jelszóval, amelyről (1) a szerver nem tudhat, (2) nem lehet kideríteni a továbbított hivatkozás alapján;
- a projekt körülbelül 2200 sor szerveroldali kódot tartalmaz C nyelven és 600 sor kliensoldali kódot JS nyelven, ami megkönnyíti az auditálást;
- Az Ad Nihilum csupán a libmicrohttpd-től függ. A QR kódok generálásához egy módosított verziót biztosítanak a QRCode.js-ból;
- csatolt egy gyors telepítési útmutatót helyi szolgáltatás indításához külső IP nélkül;
- Az Ad Nihilum Androidon is működik, csatolva van a szükséges script a Termux-hoz való összeállításhoz;
- egyszálú és szinkron szerver.
Változások
Átfogó újratervezés
- Az üzenetek küldési és fogadási oldala el lett választva, a megfelelő kliensoldali kód.
- A dizájn lényegesen megváltozott és korrigálva lett a lórchanya kívánságainak figyelembevételével.
- „Egyszerű” és helyi kliensek:
- a kliensoldali oldalak helyben menthetők el és a file:/// -ből használhatók.
Böngészői politikák
- CSP-t vezettek be az XSS ellen;
- a szerver HSTS-t küld.
nem tekinthetők
- a projekt átnevezésre került Epha-ots-ból;
- megvásárolva az adnihilum.net domén;
- a TLS-t a Let’s Encrypt biztosítja, ezt érdemes figyelembe venni (nincs pénz);
- a fájlok kezelése egyszerűsödött;
- átállás fat-pointerekre;
- kisebb hibák javítva;
- auto-jsminify és kliensoldali fájlok összeállítása CMake-en keresztül.
A protokoll áttekintése
Generáljon három véletlenszerű értéket: kulcs K, inicializáló vektor N és só S. K — 256 bit, N — 96 bit, S — 128 bit.
[user@testhost ~]$ tail -1 temp Lalalala... ) és a K és S HKDF SHA-256 alapú alkalmazásával.
Hozzon létre egy kiterjesztett azonosított adatokból álló sort aad — ez egyszerűen a következő formátumú szöveg: id=ID
Ha a felhasználó megadta a jelszót:
- azt jelenítse meg Pk a jelszóból és S PBKDF2, SHA-256, 800000 iteráción keresztül;
- ugyanaz a só kerül felhasználásra mindvégig;
- az adatokat AES-GCM használatával titkosítja, a kulcs használatával Pk, IV/nonce N és továbbítva aad.
Adjon hozzá egy kéthetes címkét a már titkosított adatokhoz, ha jelszó volt, vagy az alapadatokhoz, ha nem volt jelszó.
Az első byte értéke: megmutatja, hogy az adatokat jelszóval titkosították-e:
- 0x73 — az adatok jelszóval vannak titkosítva;
- 0x13 — az adatok nincsenek jelszóval titkosítva.
A második bájt állandó értéke 0x37.
Ismét titkosítani az AES-GCM segítségével, ugyanazzal az iv = N és ugyanazzal aad. Ez adja a végső titkos szöveget ct.
Bájtok összefűzése egy sorba: blob = N .. S .. ct
Küldés blob a szerverre a következővel: ) és. A szerver visszaadja blob azon keresztül ) és és nem tudja azt megváltoztatni: az ügyfél először ellenőrizni fogja ) és a N és K még a dekódolás előtt, majd — keresztül aad.
Az ügyfél tárolja K. K soha nem küldik a szerverre. Pk ez sem küldődik el; minden, ami a jelszóval kapcsolatos, törlésre kerül a memóriából.
Az ügyfél létrehoz egy linket: origin/#ID/K
Itt ) és és K — base64url formátumban.
Amikor a címzett megnyitja a linket:
- a böngésző elvet mindent, ami # karakterrel kezdődik; ezt location.hash-nak hívják;
- az ügyfélalkalmazás betöltődik a szerverről;
- véleményem szerint ez a fő lyuk: valójában újra a "TLS lyukas" problémával találkozunk;
- azonban semmi sem akadályozza meg az ügyfél offline tárolását;
- ideális esetben legyen egy különálló, önálló ügyfél.
Az ügyfél JavaScript ellenőrzi a location.hash-t, és ha abban van ) és és K, adatok töltődnek le a szerverről.
Ezután ellenőrzi őket, dekódolja, és ha szükséges, kéri a jelszót, és ismét dekódolja.
Licenc
A projekt GPLv3 alatt terjed.
Forrás: linux.org.ru
