Turvamudel
v1 skeem parameeter parameetri haaval
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
| Element | Väärtus | Põhjendus |
|---|---|---|
| Lingi saladus | 128 bitti funktsioonist crypto.getRandomValues | Piisavalt 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 tuletamine | HKDF-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 šiffer | AES-256-GCM, 96-bitine nonce, iga jagamise jaoks uus | Autenditud 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žiim | PBKDF2-SHA-512, 310 000 iteratsiooni, iga jagamise jaoks juhuslik sool | Pakib 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 identifikaator | 72 bitti juhuslikkust, 12 base64url märki | Võ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:
- Krüptogrammi suurust, mis piiritleb avateksti suuruse.
- Millal jagamine loodi, millal see aegub ja millal seda loeti.
- Kas jagamine on parooliga kaitstud. Klient salvestab selle lipu ümbrikusse, nii et see on meile nähtav ja koondina loendatav.
- Tavapäraseid päringu metaandmeid, mida Cloudflare'i servas ajutiselt töödeldakse, näiteks IP-aadress, ajatempel ja kasutajaagent, kättetoimetamise ja väärkasutuse tõkestamise tarbeks.
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
- NIST SP 800-38D, Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC, nonce'i pikkuse ja autentimissildi juhiste kohta.
- RFC 5869, HMAC-based Extract-and-Expand Key Derivation Function (HKDF), sealhulgas selle kohta, millal tühi sool on vastuvõetav.
- RFC 3986, URI Generic Syntax, jaotis 3.5, Fragment.
- W3C, Web Cryptography API, kogu läbivalt kasutatavate
SubtleCryptotoimingute kohta. - OWASP, Password Storage Cheat Sheet, PBKDF2 iteratsioonide juhiste kohta räsifunktsioonide kaupa.