Klassified.

Turvamudel

v1 skeem parameeter parameetri haaval

Vorminguversioon 1, külmutatud alates avaldamisest, nii nagu see on paketis @classified/crypto. Kirjeldab märkmeid; failid kasutavad samadest primitiividest ehitatud paralleelset ümbrikku.

Haldab MAIN OÜ insenerimeeskond · Viimati üle vaadatud 18. augustil 2026 · Kontrollitud avaldatud teostuse vastu

Allpool toodud parameetrid on need, mida avaldatud klient kasutab, nii et sa saad väiteid kontrollida primitiivide, mitte meie kirjelduse põhjal.

Mida server saab

Jagamine on üksainus JSON-dokument. Brauser koostab selle enne, kui midagi üles laaditakse, ja see ongi kogu see sisu, mida me salvestame. Märkme plokk näeb välja nii:

{
  "v": 1,
  "alg": "A256GCM",
  "ciphertext": "<base64url>",
  "iv": "<base64url, 12 bytes>",
  "hasPassword": false,
  "wrappedKey": null,
  "kdf": null
}

Ei ole pealkirjavälja, failinimevälja, saatja välja ega saaja välja, sest teenus ei küsi neist ühtegi. iv on nonce, mitte saladus: see on dekrüpteerimiseks vajalik ja ilma võtmeta kasutu. Kui sa parooli ei määra, jäävad wrappedKey ja kdf väärtuseks null ning võti eksisteerib ainult sinu lingis.

Parameetrid

ElementVäärtusPõhjendus
Lingi saladus128 bitti funktsioonist crypto.getRandomValuesPiisavalt lühike, et lingid jääksid hallatavaks, ja kaugelt väljaspool jõuga murdmise ulatust. Lisamärgid, mille 256-bitine saladus igale lingile juurde annaks, ei anna ühegi realistliku vastase vastu midagi.
Võtme tuletamineHKDF-SHA-256, tühi sool, info-string classified/v1 aes-gcm content key (toote algne nimi, mis jäi alles, sest selle muutmine muudaks kõiki tuletatud võtmeid)Laiendab 128-bitise saladuse täismahus AES-256 võtmeks. Sool on meelega tühi: saladus on juba ühtlaselt juhuslik, mis ongi tingimus, mille korral RFC 5869 seda lubab. Info-string eraldab selle võtme sama saladuse mis tahes tulevasest kasutusest.
Sisu šifferAES-256-GCM, 96-bitine nonce, iga jagamise jaoks uusAutenditud krüpteerimine, nii et muudetud krüptogramm ei dekrüpteeru, selle asemel et tagastada usutavat prügi. 96 bitti on nonce'i pikkus, mida NIST SP 800-38D GCM-i jaoks soovitab.
ParoolirežiimPBKDF2-SHA-512, 310 000 iteratsiooni, iga jagamise jaoks juhuslik soolPakib lingi saladuse sinu paroolist tuletatud võtme alla, nii et link üksi ei dekrüpteeri midagi. Iteratsioonide arv ületab 220 000, mida OWASPi paroolide hoiustamise juhis soovitab PBKDF2-HMAC-SHA512 jaoks (kontrollitud oktoobris 2026).
Jagamise identifikaator72 bitti juhuslikkust, 12 base64url märkiVõtmest sõltumatu. ID äraarvamine annab krüptogrammi, mida arvaja lugeda ei saa, ja kulutab selle katsega ära jagamise ainsa lugemise.

Kuhu võti läheb

Paroolita jagamise puhul kodeeritakse 128-bitine saladus base64url-vormingusse ja pannakse lingis märgi # järele. Fragmente lahendab klient ja need ei ole osa serverile saadetavast päringu-URI-st, nagu sätestab RFC 3986 jaotis 3.5. See on HTTP enda omadus, mitte meie rakendatav poliitika, ja just seepärast disain sellele toetub: võti ei ole osa päringust, mida meie serverid saavad, seega ei ole seda ka päringulogides. Garantii on siiski kitsam, kui see esmapilgul kõlab. Fragment on täielikult loetav igale lehel töötavale JavaScriptile, sealhulgas analüütikale ja kolmandate osapoolte skriptidele. See hoitakse eemal võrgukihist, mitte lehelt. Just seetõttu on allpool kirjeldatud brauserisse tarnitava koodi piirang see, mis seda disaini tegelikult piiritleb.

Võti liigub küll kaasa kõikjale, kuhu link liigub. Kleebi link vestlusrakendusse ja see rakendus hoiab nüüd võtit. Fragment kaitseb võtit meie taristu, mitte sinu valitud kanali eest.

Paroolirežiim muudab usaldusmudelit

Kui parool on määratud, genereerib brauser sama 128-bitise saladuse, krüpteerib selle saladuse PBKDF2-ga tuletatud võtme alla ja salvestab tulemuse välja wrappedKey koos soola ja iteratsioonide arvuga väljal kdf. Lingis ei lähe kaasa midagi kasutatavat.

Kasuta seda siis, kui link ja parool saavad liikuda eri teid, näiteks link e-postiga ja parool telefoni teel.

Ole täpne selles, mida see annab. Pakitud võti, sool ja iteratsioonide arv on kõik ümbrikus salvestatud ja tagastatakse igaühele, kes jagamise alla laadib. Seega saab igaüks, kes seda ümbrikku hoiab, proovida paroole võrguühenduseta, sellises tempos, nagu tema riistvara lubab, ilma et meil oleks võimalik päringute sagedust piirata. 310 000 PBKDF2-SHA-512 iteratsiooni teevad iga katse kalliks ja see kulu ongi kogu kaitse. Võtme tuletamise funktsioon korrutab ründaja tööd; entroopiat, mida sinu paroolil kunagi ei olnud, see luua ei suuda. Vali parool, millel on tegelik entroopia, mitte selline, mida on kerge meelde jätta.

Mida me siiski näeme

Disain, kus serveril ei ole võtit, piirab sisu, mitte metaandmeid. Me saame näha ja mõnel juhul peame nägema:

Miski sellest ei paljasta sisu ja miski sellest pole ka olematu. Väide „me ei salvesta midagi“ oleks vale. Privaatsuspoliitika käsitleb kontotasandi kirjeid põhjalikumalt.

Kus disain lõpeb

Ühekordne kättetoimetamine on parim pingutus, mitte aatomaarne toiming

Jagamise lugemine on laadimine, millele järgneb kustutamine lõppkooskõlalisest võtme-väärtuse salvestusest. Need on kaks toimingut, mitte üks tehing. Kaks piisavalt lähestikku saabuvat päringut võivad mõlemad sisu kätte saada enne, kui kumbki kustutamine jõustub. Salvestatud TTL on tagavara, mis tagab lõpuks eemaldamise, nii et ainus lugemine on tugev vaikeseadistus, mitte krüptograafiline garantii. See, mida peab lugema täpselt üks kord, vajab protokolli, mille pakkumist me ei väida.

Automaatne esimene lugeja võib jagamise ära kulutada

Lingieelvaatajad, turvaskannerid ja e-posti lüüsid järgivad URL-e. Igaüks neist võib olla esimene lugeja ja jagamise ära põletada, enne kui sinu saaja selle avab. See on omane lugemisel kustutamisele HTTP peal, mitte konkreetselt meile. Kui saaja teatab surnud lingist, mida ta kunagi ei avanud, on peaaegu alati just see põhjus.

Brauserisse tarnitava koodi tarnime meie

Krüpteerimine töötab JavaScriptis, mille meie serverid sulle saadavad. Teenusepakkuja, kes suudab sihitud külastajale saata muudetud klientkoodi, võiks avateksti kinni püüda enne, kui krüpteerimine üldse toimub. Lähtekoodi avaldamine aitaks ülevaatajatel kavandatud disaini mõista, kuid isegi see ei tõenda, et mõni konkreetne külastaja sai täpselt selle versiooni. See piirang kehtib iga brauseripõhise läbivalt krüpteeritud süsteemi kohta. Leevendused on korratavad ehitused, allkirjastatud natiivsed kliendid ja sõltumatud auditid. Et olla otsekohene selles, kus me seisame: meie lähtekood ei ole praegu avalik ja me ei ole tellinud välist auditit, nii et see piirang on täna selline, mille pead usu peale võtma.

Mida miski sellest ei ohja. Saaja, kes suudab sisu lugeda, saab sellest teha ekraanipildi, ekraani pildistada või avateksti edasi saata. Ühekordne jagamine ohjab koopiat meie taristus. Inimest see ohjata ei saa.

Algallikad

  1. NIST SP 800-38D, Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC, nonce'i pikkuse ja autentimissildi juhiste kohta.
  2. RFC 5869, HMAC-based Extract-and-Expand Key Derivation Function (HKDF), sealhulgas selle kohta, millal tühi sool on vastuvõetav.
  3. RFC 3986, URI Generic Syntax, jaotis 3.5, Fragment.
  4. W3C, Web Cryptography API, kogu läbivalt kasutatavate SubtleCrypto toimingute kohta.
  5. OWASP, Password Storage Cheat Sheet, PBKDF2 iteratsioonide juhiste kohta räsifunktsioonide kaupa.