Confidex
విభాగాలు

మా రహస్యాలను చదవడానికి కీలను పట్టుకోకుండా సర్వర్ ఎలా నిల్వ చేస్తుంది మరియు సమకాలీకరించగలదు? Confidex దాని కీలను ఎలా సృష్టిస్తుందో, వాటిని లాక్‌లో రక్షిస్తుంది మరియు డేటాను గుప్తీకరించడానికి మరియు మార్పులను ధృవీకరించడానికి వాటిని ఎలా ఉపయోగిస్తుందో మేము అనుసరిస్తాము.

తాళం

ఎంపికైన వ్యక్తి మాత్రమే తలుపు తెరవగలడు

ది మ్యాట్రిక్స్ రీలోడెడ్

రహస్య డేటాను నిల్వ చేయడానికి మేము వర్చువల్ vaultని రూపొందిస్తున్నామని ఊహించండి. అప్లికేషన్ మూసివేసిన తర్వాత అది తప్పనిసరిగా ఆ డేటాను ల్యాప్‌టాప్‌లో ఉంచాలి మరియు దానిని మరొక పరికరంలో తెరవనివ్వండి. ఖజానాకు దాని స్వంత కీలు అవసరం. మేము వాటిని తప్పనిసరిగా నిల్వ చేయాలి, తద్వారా ఫైల్‌లను కాపీ చేయడం వల్ల బయటి వ్యక్తికి వాటి కంటెంట్‌లను చదవడానికి లేదా మార్చడానికి మార్గం లేదు.

ఒక lock కీలను రక్షిస్తుంది: ఒక చిన్న ఎన్‌క్రిప్టెడ్ ఫైల్. దీన్ని తెరవడానికి ప్రధాన పాస్‌వర్డ్ మరియు రహస్య కోడ్, secret_key; ఫైల్‌లోనే లేదు. మేము ఉదయం వార్తాపత్రికలో మొత్తం తాళాన్ని ముద్రించగలము. పాఠకులు ఒక కాపీని పొందుతారు, కానీ దానిని ప్రచురించడం వలన ప్రైవేట్ కీలు బహిర్గతం కావు.

బయటి వ్యక్తి ఈ ఫైల్‌ని పొంది, మాస్టర్ పాస్‌వర్డ్‌ని కూడా నేర్చుకుంటాడనుకుందాం. పాస్‌వర్డ్ మాత్రమే అవసరమయ్యే ప్రతి గణనను వారు ఇప్పుడు పునరావృతం చేయవచ్చు, కానీ ఆ లెక్కలు లాక్‌ని తెరిచే కీని ఉత్పత్తి చేయవు: secret_key కూడా ఇన్‌పుట్. ఫైల్‌లో పాస్‌వర్డ్ యొక్క ప్రత్యేక తనిఖీ లేదు. దీన్ని తెరవడానికి ఇప్పటికీ తెలియని రహస్య కోడ్ అవసరం.

ఆ కోడ్ క్రిప్టోగ్రాఫికల్ యాదృచ్ఛిక డేటా నుండి వచ్చింది; ఒక వ్యక్తి దానిని కనిపెట్టడు. secret_key తెలియనంత వరకు, సరిగ్గా ఊహించిన మాస్టర్ పాస్‌వర్డ్ కూడా లాక్‌ని తెరవదు: దాడి చేసే వ్యక్తికి ఇప్పటికీ యాదృచ్ఛిక రహస్యం లేదు. బలహీనమైన పాస్‌వర్డ్ మాత్రమే సర్వర్ కాపీని ఆచరణాత్మక నిఘంటువు దాడిగా మార్చదు.

దాడి చేసే వ్యక్తి secret_keyని కూడా పొందినట్లయితే, వారు మాస్టర్-పాస్‌వర్డ్ అంచనాలను ఆఫ్‌లైన్‌లో పరీక్షించగలరు. ఇది ఖర్చుతో కూడుకున్నది, కానీ పాస్‌వర్డ్ యొక్క బలంపై చివరికి కష్టం ఆధారపడి ఉంటుంది.

కీలు

పెద్దమనుషులు, కీలు ఏమి చేస్తాయి? కీలు... వస్తువులను అన్‌లాక్ చేయాలా?

పైరేట్స్ ఆఫ్ ది కరీబియన్ - డెడ్ మ్యాన్స్ చెస్ట్

అప్లికేషన్ ఆపరేటింగ్ సిస్టమ్ యొక్క క్రిప్టోగ్రాఫిక్ జనరేటర్ నుండి 32 యాదృచ్ఛిక బైట్‌లను పొందుతుంది మరియు వాటిని కీగా ఉపయోగించడానికి సిద్ధం చేస్తుంది. ఈ సిద్ధం చేయబడిన బైట్‌లు ప్రైవేట్ మాస్టర్ కీ, master_key.

అప్లికేషన్ ఎల్లప్పుడూ master_key నుండి ఒకే కీలను పొందుతుంది: ఒకే బైట్‌లలో ఒకే గణనలను పునరావృతం చేయడం అదే ఫలితాన్ని ఇస్తుంది. ల్యాప్‌టాప్ మరియు ఫోన్ ఒకే విధమైన కీలను తిరిగి పొందగలవు. కొత్త పరికరంలో master_keyని పొందడానికి, అప్లికేషన్ ముందుగా మాస్టర్ పాస్‌వర్డ్ మరియు secret_keyతో లాక్‌ని తెరవాలి.

మొదటి జత: ఎన్క్రిప్షన్

నేనే కీమాస్టర్.

ఘోస్ట్‌బస్టర్స్

గుప్తీకరించిన డేటాను నిల్వ చేయడానికి, అప్లికేషన్ పబ్లిక్ కీని master_key: secret_key నుండి గణిస్తుంది. ఇది వాల్ట్ కోసం డేటాను ఎన్‌క్రిప్ట్ చేయగలదు, అయితే డిక్రిప్షన్‌కు master_key అవసరం.

"పబ్లిక్" అనేది అల్గారిథమ్‌లో ఈ కీ పాత్రను వివరిస్తుంది, ప్రతి ఒక్కరికీ అందించాల్సిన బాధ్యత కాదు. Confidexలో ఇది వినియోగదారుతో ఉంటుంది. ఇది లాక్ తెరవడానికి అవసరమైన రెండవ రహస్యం, కాబట్టి ఇది స్థానికంగా ఉంటుంది మరియు నెట్‌వర్క్ ద్వారా పంపబడదు. స్వంతంగా, secret_key వాల్ట్ కోసం డేటాను గుప్తీకరించడానికి ఎవరైనా అనుమతిస్తుంది, కానీ దానిని డీక్రిప్ట్ చేయదు లేదా దాని తరపున మార్పులకు సంతకం చేయదు.

X25519 అనేది master_key నుండి secret_key ను లెక్కించే అల్గోరిథమ్. master_key ను secret_key నుండి తిరిగి పొందడం ఆచరణలో అసాధ్యం. సెకనుకు 10^18 కర్వ్ ఆపరేషన్లు చేసే ఒక ఊహాత్మక సూపర్ కంప్యూటరుపై కూడా సాంప్రదాయ దాడికి సగటున సుమారు 2.3 ట్రిలియన్ సంవత్సరాలు పడతాయి (SafeCurves అంచనా).

public bytes Random bytes32 bytes master_key secret_key public bytes Random bytes32 bytes master_key secret_key
యాదృచ్ఛిక బైట్‌ల నుండి ఎన్‌క్రిప్షన్ కీల వరకు.

రెండవ జత: సంతకాలు

ఒరిజినల్ విషయం సంతకం మాత్రమే

మీకు వీలైతే నన్ను పట్టుకోండి

మొదటి జత కంటెంట్‌లను దాచడంలో సహాయపడుతుంది. వాల్ట్ యజమాని మార్పుకు అధికారం ఇచ్చారని నిర్ధారించడానికి ఇప్పుడు మాకు ఒక మార్గం అవసరం. సర్వర్ తప్పనిసరిగా సంతకాలను కూడా తనిఖీ చేయగలగాలి, కాబట్టి మేము దానికి పబ్లిక్ ధృవీకరణ కీని పంపాలి. మొదటి జత యొక్క పబ్లిక్ పార్ట్ secret_key, ఇది సర్వర్ అందుకోకూడదు. కాబట్టి మేము సంతకాల కోసం రెండవ, శాశ్వత కీ జతని సృష్టిస్తాము.

మరొక స్వతంత్ర రహస్యాన్ని నిల్వ చేయడానికి బదులుగా, మేము master_key నుండి ప్రైవేట్ సంతకం కీని పొందాము మరియు దానిని signing_key అని పిలుస్తాము. డేటా మరియు లాక్‌పై సంతకం చేయడానికి అప్లికేషన్ దీన్ని ఉపయోగిస్తుంది. ఇతర పరికరాలు మరియు సర్వర్ కంటెంట్‌లను చదవకుండా సంతకాలను తనిఖీ చేయడానికి దాని పబ్లిక్ భాగాన్ని ఉపయోగిస్తాయి.

మేము ఈ జతను అదే master_key నుండి పునరుద్ధరించవచ్చు. అప్లికేషన్ దాని నుండి ప్రారంభ విలువను పొందింది: సంతకం కీని ప్రత్యేకంగా నిర్ణయించే 32 బైట్‌లు.

వేర్వేరు ఉద్యోగాల కోసం వేర్వేరు కీలను పొందడానికి, మేము గణనలో స్థిర లేబుల్‌ని చేర్చుతాము: ఇక్కడ, confidex/vault/ed25519/v1. అదే master_key మరియు అదే లేబుల్ ఎల్లప్పుడూ ఒకే కీని ఉత్పత్తి చేస్తాయి.

మాస్టర్ పాస్‌వర్డ్ ఈ లెక్కలను నమోదు చేయలేదు. రెండు జంటలు master_key యాదృచ్ఛిక బైట్‌లపై ఆధారపడి ఉంటాయి, ఒక వ్యక్తి కనిపెట్టిన స్ట్రింగ్‌పై కాదు. ఈ వ్యత్యాసం తర్వాత ముఖ్యమైనది: పాస్‌వర్డ్ ఇప్పటికే ఉన్న కీలకు యాక్సెస్‌ను రక్షిస్తుంది, కాబట్టి మనం కీలను మార్చకుండానే దాన్ని మార్చవచ్చు.

ఉత్పన్నం హ్యాష్-ఆధారిత కీ డెరివేషన్ ఫంక్షన్‌ని ఉపయోగిస్తుంది: HKDF, HMAC-based Extract-and-Expand Key Derivation Function. Confidex దీన్ని SHA-256తో ఉపయోగిస్తుంది, అందుకే దీనికి HKDF-SHA256 అని పేరు వచ్చింది. ఫలితంగా వచ్చే 32 బైట్‌లు Ed25519 జత కోసం seed. signing_key యొక్క పబ్లిక్ భాగం secret_keyని బహిర్గతం చేయదు, కాబట్టి సంతకం ధృవీకరణ కోసం మేము దానిని సర్వర్‌కు పంపవచ్చు.

public bytes HKDF-SHA256keymaster_keyinfo"confidex/vault/ed25519/v1" signing_key Signature verification public bytes HKDF-SHA256keymaster_keyinfo"confidex/vault/ed25519/v1" signing_key Signature verification
ఒక ప్రత్యేక సంతకం కీ, అదే మాస్టర్ కీ నుండి తీసుకోబడింది.

లాక్ ఫైల్ అంటే ఏమిటి మరియు అది ఏమి చేస్తుంది?

పాడ్ బే డోర్‌లను తెరవండి, HAL.
నన్ను క్షమించండి, డేవ్. నేను అలా చేయలేనని భయపడుతున్నాను.

ఒక స్పేస్ ఒడిస్సీ

లాక్ ఎన్‌క్రిప్టెడ్ master_keyని నిల్వ చేస్తుంది. దీన్ని తెరవడానికి ప్రధాన పాస్‌వర్డ్ మరియు secret_key అవసరం. పబ్లిక్ హెడర్‌లో ఫార్మాట్ వెర్షన్, వాల్ట్ ఐడెంటిఫైయర్, signing_key పబ్లిక్ భాగం, ఉప్పు మరియు పాస్‌వర్డ్-ప్రాసెసింగ్ పారామీటర్‌లు ఉన్నాయి. అంతర్గత ఫార్మాట్ వెర్షన్ master_keyతో పాటు గుప్తీకరించబడింది.

లాక్‌ని సృష్టిస్తున్నప్పుడు, అప్లికేషన్ ఇప్పటికే master_keyని కలిగి ఉంది, కనుక ఇది గుప్తీకరణకు ముందు secret_keyని గణిస్తుంది. దీన్ని తెరిచేటప్పుడు, వినియోగదారు secret_keyని విడిగా సరఫరా చేస్తారు: ఇది లాక్ యొక్క పబ్లిక్ కాపీలో లేదు.

డిక్రిప్షన్ తర్వాత, అప్లికేషన్ X25519ని ఉపయోగించి master_key యొక్క పబ్లిక్ భాగాన్ని గణిస్తుంది మరియు ఇది secret_keyతో సరిపోలడం అవసరం. ఇది signing_keyని పునరుద్ధరించి, దాని పబ్లిక్ భాగాన్ని హెడర్‌లోని కీతో సరిపోల్చుతుంది. ఈ విధంగా, లాక్ స్వయంగా తనిఖీ చేస్తుంది.

మాస్టర్-పాస్‌వర్డ్ అంచనా వేగాన్ని తగ్గించడానికి, ప్రతి ప్రయత్నానికి సమయం మరియు జ్ఞాపకశక్తి ఖర్చవుతుంది. Confidex 64 MiB మెమరీ మరియు మూడు పాస్‌లతో Argon2idని ఉపయోగిస్తుంది. పాస్‌వర్డ్ ప్రాసెసింగ్ కూడా యాదృచ్ఛిక ఉప్పును ఉపయోగిస్తుంది. ఉప్పు రహస్యం కాదు: ఇది ఒకే పాస్‌వర్డ్‌ను వేర్వేరు తాళాలలో వేర్వేరు ఫలితాలను ఉత్పత్తి చేస్తుంది.

secret_key ఇప్పటికే తెలిసినట్లయితే, పాస్‌వర్డ్ పొడవు దాడి యొక్క స్థాయిని నాటకీయంగా మారుస్తుంది. 5 యాదృచ్ఛిక చిన్న లాటిన్ అక్షరాలతో 12 మిలియన్ల కలయికలు ఉన్నాయి, 7లో 8 బిలియన్లు, మరియు 12లో 95 క్వాడ్రిలియన్లు ఉన్నాయి. 7 నుండి 12 అక్షరాలకు వెళ్లడం వలన శోధన స్థలం దాదాపు 12 మిలియన్ రెట్లు పెరుగుతుంది. ఇచ్చిన మెషీన్‌లో 7 అక్షరాలను శోధించడానికి సగటున ఒక రోజు తీసుకుంటే, 5కి రెండు నిమిషాలు పడుతుంది మరియు 12కి దాదాపు 33,000 సంవత్సరాలు పడుతుంది.

Argon2id ఫలితం మరియు secret_key నుండి ఒక కీని పొందడానికి, మేము confidex/lock/wrap/v1 లేబుల్‌తో ముందుగా పరిచయం చేసిన HKDF-SHA256 ఫంక్షన్‌ని ఉపయోగిస్తాము. ఫలితం wrapping_key, లాక్‌ని ఎన్‌క్రిప్ట్ చేసే కీ.

మేము తప్పనిసరిగా master_keyని దాచాలి మరియు దానిని తారుమారు చేయకుండా కాపాడాలి. XChaCha20-Poly1305 దీన్ని wrapping_keyతో గుప్తీకరిస్తుంది మరియు ప్రమాణీకరణ ట్యాగ్‌ని జోడిస్తుంది. ట్యాగ్ సాంకేతికపాఠాన్ని పబ్లిక్ హెడర్‌కు బంధిస్తుంది: తప్పు పాస్‌వర్డ్ లేదా రక్షిత బైట్‌లకు మార్చడం వల్ల తెరవడం విఫలమవుతుంది. ట్యాగ్ మరియు యాదృచ్ఛిక ఏక-వినియోగ విలువ, nonce, సాంకేతికలిపితో నిల్వ చేయబడతాయి.

లాక్ సృష్టించబడిన ప్రతిసారీ లేదా మళ్లీ ఎన్‌క్రిప్ట్ చేయబడినప్పుడు, అప్లికేషన్ తాజా ఉప్పును మరియు nonceని పొందుతుంది. ఎన్‌క్రిప్టెడ్ కంటెంట్‌లలో ఒక వెర్షన్ బైట్ మరియు master_key యొక్క 32 బైట్‌లు ఉన్నాయి; వాటితో పాటు 24-బైట్ nonce మరియు 16-బైట్ ట్యాగ్ నిల్వ చేయబడతాయి. అల్గోరిథం డాక్యుమెంటేషన్ నిర్మాణాన్ని వివరిస్తుంది.

పునరుద్ధరించబడిన కీల మధ్య అసమతుల్యత అనేది ఉద్దేశపూర్వకంగా తప్పుగా రూపొందించబడిన లాక్ లేదా దానిని సృష్టించిన ప్రోగ్రామ్‌లోని బగ్ కారణంగా సంభవించవచ్చు. యాదృచ్ఛిక బైట్ అవినీతి సాధారణంగా ట్యాగ్‌ని తనిఖీ చేసినప్పుడు ముందుగా గుర్తించబడుతుంది.

ఈ ట్యాగ్‌ని తనిఖీ చేయడానికి అవసరమైన రహస్యాలు సర్వర్‌లో లేవు. లాక్‌ని బదిలీ చేయడానికి, అప్లికేషన్ signing_keyతో చేసిన సంతకాన్ని జోడిస్తుంది. ఇది పబ్లిక్ హెడర్ మరియు ఎన్‌క్రిప్టెడ్ కంటెంట్‌లతో సహా పూర్తి చేసిన ఫైల్‌ను కవర్ చేస్తుంది. సర్వర్ సంతకాన్ని తనిఖీ చేస్తుంది మరియు మొదటి అప్‌లోడ్‌లో, signing_key యొక్క పూర్తి పబ్లిక్ భాగాన్ని మరియు అంతర్గత వాల్ట్ ఐడెంటిఫైయర్‌ను పిన్ చేస్తుంది. ఇది ఈ కీకి వ్యతిరేకంగా తదుపరి మార్పులను తనిఖీ చేస్తుంది. లాక్ మరియు గుప్తీకరించిన డేటా అదే signing_keyతో సంతకం చేయబడ్డాయి, master_key నుండి పునరుద్ధరించబడ్డాయి.

ఖజానా

మేము ఇప్పుడు లాక్‌ని ప్రచురించవచ్చు. secret_key మరియు master password తెలిసిన వారు మాత్రమే master_keyని చదవగలరు, అయితే ఎవరైనా లాక్ ఫైల్ నుండి పబ్లిక్ సైనింగ్ కీని తీసుకోవచ్చు మరియు లాక్ లేదా డేటాలోని కంటెంట్‌లను చూడకుండా సంతకం చేసిన డేటాను తనిఖీ చేయవచ్చు.

పాస్‌వర్డ్‌ను పరిగణించండి, SuperPa55worD. ప్రస్తుతానికి, మేము దీన్ని మాత్రమే సేవ్ చేయాలనుకుంటున్నాము: అప్లికేషన్‌ను మూసివేసిన తర్వాత, లాక్ ఫైల్‌ని మరియు గుప్తీకరించిన పాస్‌వర్డ్‌ను ఎవరికీ కనిపించకుండా ఎక్కడికైనా SuperPa55worD పంపగలుగుతాము, అయితే మా రచయిత హక్కును ధృవీకరించడానికి వారిని అనుమతించాలి. మేము secret_key మరియు master passwordని కలిగి ఉన్నప్పుడు ఎన్‌క్రిప్షన్ తప్పనిసరిగా రివర్సబుల్‌గా ఉండాలి. ఒక సిమెట్రిక్ సాంకేతికలిపి అదే కీతో గుప్తీకరించగలదు మరియు డీక్రిప్ట్ చేయగలదు. మేము ఆ కీని నిల్వ చేయనందున, లాక్‌ని ఉపయోగించి దాన్ని తప్పనిసరిగా రికవర్ చేయగలగాలి. మేము దీనిని message_key అని పిలుస్తాము.

మేము ప్రతి కొత్త ఎన్‌క్రిప్షన్ కోసం ప్రత్యేక message_keyని పొందుతాము. మేము ఇంకా దాని పునరుద్ధరణను ఏర్పాటు చేయాలి: సాంకేతికలిపి పక్కన కీని ఓపెన్‌లో ఉంచడం కాపీని కలిగి ఉన్న ఎవరైనా ప్రతిదీ చదవడానికి అనుమతిస్తుంది.

తాజా యాదృచ్ఛిక బైట్‌ల నుండి, ఈ ఎన్‌క్రిప్షన్ కోసం అప్లికేషన్ తాత్కాలిక X25519 జతని సృష్టిస్తుంది: record_key. ఇది record_key యొక్క ప్రైవేట్ భాగాన్ని మరియు వాల్ట్ యొక్క శాశ్వత పబ్లిక్ కీ, secret_keyని తీసుకుంటుంది మరియు భాగస్వామ్య రహస్యాన్ని గణిస్తుంది. ఒక ప్రత్యేక ఫంక్షన్ ఆ రహస్యం నుండి message_key వచ్చింది; ఈ కీ మన పాస్‌వర్డ్‌ను గుప్తీకరిస్తుంది.

చదివేటప్పుడు, అప్లికేషన్ మరొక మార్గాన్ని తీసుకుంటుంది. ఇది master_key మరియు record_key యొక్క పబ్లిక్ భాగాన్ని ఉపయోగిస్తుంది. ఈ రెండు కీలు ఒకే భాగస్వామ్య రహస్యాన్ని ఉత్పత్తి చేస్తాయి. గణితశాస్త్రపరంగా, రెండు మార్గాలు వక్రరేఖపై ఒకే ప్రారంభ బిందువును వేర్వేరు క్రమంలో రెండు ప్రైవేట్ సంఖ్యలతో గుణిస్తాయి. ఆర్డర్ ఫలితాన్ని మార్చదు. కాబట్టి మేము record_key యొక్క ప్రైవేట్ భాగాన్ని ఉంచకుండానే డిక్రిప్షన్ కీని పునరుద్ధరించవచ్చు.

రెండు పబ్లిక్ కీల నుండి ఈ రహస్యాన్ని పొందడం ఆచరణాత్మకంగా అసాధ్యం: ఏదైనా మార్గానికి సంబంధిత ప్రైవేట్ కీ అవసరం. పబ్లిక్ పాయింట్లు వాటిని ఉత్పత్తి చేసిన ప్రైవేట్ నంబర్‌లను సమర్ధవంతంగా తిరిగి పొందనివ్వవు. ఈ గణిత ట్రిక్ ఖజానా యొక్క భద్రతను బలపరుస్తుంది. కానీ మన తాళం వేసి వేరే ఖజానాని ఇవ్వకుండా ఎవరైనా ఆపలేదు.

మేము ఇప్పుడు సాంకేతికలిపిని record_key పబ్లిక్ భాగంతో పాటు నిల్వ చేయవచ్చు. భవిష్యత్తులో చదవడానికి record_key యొక్క ప్రైవేట్ భాగం మరియు ఉపయోగించిన message_key అవసరం లేదు. తర్వాత, అప్లికేషన్ master_key నుండి డిక్రిప్షన్ కీని మరియు record_key నిల్వ చేయబడిన పబ్లిక్ భాగాన్ని తిరిగి పొందుతుంది. ఒక శాశ్వత వాల్ట్ రహస్యం అనేక విడివిడిగా గుప్తీకరించిన విలువలను డీక్రిప్ట్ చేయగలదు, ప్రతి ఒక్కటి అవసరమైనప్పుడు దాని స్వంత message_key పునరుద్ధరించబడుతుంది.

వచనాన్ని దాచడం సరిపోదు: మనం దానిని చదివేటప్పుడు కూడా టాంపరింగ్‌ను గుర్తించాలి. కాబట్టి ఎన్‌క్రిప్షన్ ఒక ప్రామాణీకరణ ట్యాగ్‌ను జోడిస్తుంది, గుప్తీకరించిన డేటాతో కలిపి తనిఖీ చేయబడిన చిన్న విలువ. చెక్ విఫలమైతే, అప్లికేషన్ ఫలితాన్ని తిరస్కరిస్తుంది. ఇది విజయవంతంగా డీక్రిప్ట్ చేయబడిన పాస్‌వర్డ్‌గా యాదృచ్ఛికంగా లేదా మార్చబడిన వచనాన్ని ప్రదర్శించకూడదు.

public bytes Fresh random bytes record_key secret_key Shared secret Derive message key message_key Encrypted passwordpacket public bytes Fresh random bytes record_key secret_key Shared secret Derive message key message_key Encrypted passwordpacket
ప్రతి ఎన్‌క్రిప్షన్ కోసం తాజా కీ జత.

message_key కంటెంట్‌లను గుప్తీకరిస్తున్నప్పుడు, భాగస్వామ్య రహస్యాన్ని స్థాపించడంలో అసమాన జంట సహాయపడే నిర్మాణాన్ని మేము వివరించాము. దీనిని Hybrid Public Key Encryption లేదా HPKE అని పిలుస్తారు మరియు RFC 9180లో పేర్కొనబడింది. Confidex రహస్యాన్ని అంగీకరించడానికి X25519ని, కీలను ఉత్పన్నం చేయడానికి HKDF-SHA256ని మరియు సమగ్రత తనిఖీతో ఎన్‌క్రిప్షన్ కోసం ChaCha20-Poly1305ని ఉపయోగిస్తుంది. ఇక్కడ, HKDF record_key మరియు master_key జతని ఉపయోగించి అంగీకరించిన భాగస్వామ్య రహస్యాన్ని తీసుకుంటుంది; ఇది Ed25519 seed నుండి ఒక ప్రత్యేక పని. RFC 5869 HKDFని వివరిస్తుంది.

తదుపరి ఎన్‌క్రిప్షన్ కోసం, అప్లికేషన్ కొత్త record_key మరియు కొత్త HPKE సందర్భాన్ని సృష్టిస్తుంది. message_key మరియు nonce కలయికను మళ్లీ ఉపయోగించడం సాంకేతికలిపి రక్షణను విచ్ఛిన్నం చేస్తుంది. Confidexలో, కీ మరియు nonce HPKE లోపల ఉద్భవించాయి, ఒక సందేశం కోసం ఉపయోగించబడుతుంది, ఆపై సందర్భం విస్మరించబడుతుంది.

ChaCha20 స్వయంగా 256-బిట్ message_keyని ఉపయోగిస్తుంది. ప్రత్యక్ష దాడి యొక్క భావాన్ని పొందడానికి, ఒక కల్పిత సూపర్ కంప్యూటర్ సెకనుకు బిలియన్ బిలియన్ అభ్యర్థులను పరీక్షిస్తున్నట్లు ఊహించుకోండి. 2²⁵⁶ సాధ్యం కీలను శోధించడానికి దాదాపు 1.8 × 10⁵¹ సంవత్సరాలు పడుతుంది. RFC 8439 అల్గోరిథం మరియు దాని విశ్లేషణను వివరిస్తుంది.

ఒక రికార్డు

మేము సంతోషంగా ఉన్నారా?

పల్ప్ ఫిక్షన్

మేము పాస్‌వర్డ్‌ను సేవ్ చేసాము, కానీ వెబ్‌సైట్‌కి లాగిన్ చేయడానికి సాధారణంగా వినియోగదారు పేరు మరియు చిరునామా కూడా అవసరం. కొన్నిసార్లు మనకు వాటి పక్కన ఒక గమనిక అవసరం. మేము ఈ విలువలను విడిగా నిల్వ చేస్తే, అప్లికేషన్ ఏదో ఒకవిధంగా అవి కలిసి ఉన్నాయని గుర్తుంచుకోవాలి. మనం ఈ “కాగితాలను” ఒక కవరులో పెట్టుకుందాం. మేము ఫీల్డ్‌లను ఒక సేకరణగా కలుపుతాము మరియు దానిని record అని పిలుస్తాము.

రికార్డ్ ఏదైనా ఫీల్డ్ కలయికను కలిగి ఉండవచ్చు. అప్లికేషన్ వాటిని ఒక ప్యాకెట్‌లో సమీకరించి, దానిని కుదించి, మేము ఇప్పుడే వివరించిన నిర్మాణాన్ని ఉపయోగించి మొత్తం ఎన్‌క్రిప్ట్ చేస్తుంది. ఫీల్డ్ విలువలు, పేర్లు, రకాలు మరియు ట్యాగ్‌లు అన్నీ రక్షించబడతాయి. వెబ్‌సైట్ చిరునామాను మార్చడం, అదే పాస్‌వర్డ్‌ను ఉంచినప్పటికీ, కొత్త record_keyతో ఎన్‌క్రిప్ట్ చేయబడిన మొత్తం రికార్డ్ యొక్క కొత్త వెర్షన్‌ను సృష్టిస్తుంది.

హాష్-గొలుసు

మీ ప్రాజెక్ట్ బ్లాక్‌చెయిన్‌ని ఉపయోగించాలా? → నం

XKCD 2267

secret_key తెలిసిన ఎవరైనా మా వాల్ట్ కోసం ఎన్‌క్రిప్టెడ్ రికార్డ్‌ను సిద్ధం చేయవచ్చు. దీన్ని మాది అని అంగీకరించకుండా ఉండటానికి, అప్లికేషన్ ప్రతి రికార్డ్ వెర్షన్‌ను signing_keyతో సంతకం చేస్తుంది. ఈ కీ లేకుండా, సర్వర్ మరియు ఇతర పరికరాలు ఆమోదించే సంతకంతో బయటి వ్యక్తి సంస్కరణను సృష్టించలేరు.

గుప్తీకరించిన సంస్కరణకు కొంత సమాచారం అవసరం: ఇది ఏ ఖజానా మరియు రికార్డ్‌కు చెందినది, ఎప్పుడు మార్చబడింది మరియు ఏ సంస్కరణలు ముందు ఉన్నాయి. ఇది పబ్లిక్ హెడర్‌ను ఏర్పరుస్తుంది. ఇది పాస్‌వర్డ్‌ని కలిగి లేదు, కానీ దీనికి ఇంకా రక్షణ అవసరం: లేకుంటే ఎవరైనా సాంకేతికలిపిని తాకకుండా వస్తువుల యాజమాన్యం మరియు సంబంధాలను మార్చవచ్చు. అప్లికేషన్ సైఫర్‌టెక్స్ట్‌తో కలిసి ఖచ్చితమైన హెడర్ బైట్‌లను సంతకం చేస్తుంది. సంతకం చేసిన డేటాను మార్చడం సంతకం చెల్లదు.

సర్వర్ మూసివున్న పొట్లాల గిడ్డంగిని పోలి ఉంటుంది. ఇది హెడర్, ఎన్‌క్రిప్టెడ్ కంటెంట్‌లు మరియు సంతకాన్ని చూస్తుంది, కానీ లోపల పాస్‌వర్డ్‌ను కాదు మరియు గ్రహీత నగరంలో ఉన్నారని దానికి తెలుసు. ఇది signing_key యొక్క పిన్ చేయబడిన పబ్లిక్ పార్ట్‌కు వ్యతిరేకంగా సంతకాన్ని తనిఖీ చేస్తుంది మరియు కొత్త సంస్కరణను ఆమోదించాలా వద్దా అని నిర్ణయిస్తుంది. దీనికి మాస్టర్ పాస్‌వర్డ్ లేదా secret_key లేదా ఏదైనా ప్రైవేట్ కీ అవసరం లేదు. చదివేటప్పుడు, క్లయింట్ అదే సంతకాన్ని తనిఖీ చేస్తుంది, ఆపై HPKE ప్రమాణీకరణ ట్యాగ్‌ని ఉపయోగించి డిక్రిప్షన్ సమయంలో కంటెంట్‌లు మరియు హెడర్ మధ్య బైండింగ్‌ను మళ్లీ తనిఖీ చేస్తుంది.

సంతకం సంస్కరణల మధ్య లింక్‌లను కూడా రక్షిస్తుంది. ఖచ్చితమైన హెడర్ మరియు సైఫర్‌టెక్స్ట్ బైట్‌ల SHA-256 హాష్ వెర్షన్ ఐడెంటిఫైయర్ అవుతుంది. తదుపరి సంస్కరణ హెడర్ మునుపటి సంస్కరణ ఐడెంటిఫైయర్‌ని కలిగి ఉంది. మేము వెబ్‌సైట్ పాస్‌వర్డ్‌ను మార్చినప్పుడు, అప్లికేషన్ ఈ లింక్‌తో కొత్త ఆబ్జెక్ట్‌ను సృష్టిస్తుంది మరియు సంతకం చేస్తుంది. పాత వస్తువు మరియు దాని సంతకం మారదు. కొత్త వెర్షన్ సంతకాన్ని భద్రపరిచేటప్పుడు పూర్వీకుడిని భర్తీ చేయడం విఫలమవుతుంది. రెండు పరికరాలు స్వతంత్ర మార్పులు చేస్తే, రెండు శాఖలు మనుగడలో ఉంటాయి; విలీన సంస్కరణ రెండింటినీ సూచించవచ్చు.

బ్లాక్‌చెయిన్ గుర్తుందా? అది ఉంది :-).

పబ్లిక్ హెడర్ మమ్మల్ని డీక్రిప్ట్ చేయకుండా లింక్‌లను తనిఖీ చేయడానికి అనుమతిస్తుంది, అయితే కొంత సమాచారం కనిపిస్తుంది. సర్వర్‌కు ఐడెంటిఫైయర్‌లు, వెర్షన్ లింక్‌లు, క్లయింట్ అందించిన మార్పు సమయం, ఫీల్డ్‌ల సంఖ్య మరియు ప్రతి ఫీల్డ్ విలువ ఎన్‌కోడ్ చేసిన పరిమాణం గురించి తెలుసు. ఎన్‌క్రిప్షన్ రికార్డ్ కంటెంట్‌లను దాచిపెడుతుంది, ఈ నిర్మాణ సమాచారం కాదు.

Header andparent IDs Encrypted recordpacket Sign revision signing_key Signed revision Header andparent IDs Encrypted recordpacket Sign revision signing_key Signed revision
హెడర్ మరియు సైఫర్‌టెక్స్ట్ కలిసి సంతకం చేయబడ్డాయి.

సమకాలీకరించు

“డేటా లీక్ కాదు, ఉచిత పంపిణీ బ్యాకప్.”

ఇంటర్నెట్ పోటి.

అనేక పరికరాలలో పని చేయడానికి, మేము వాటి మధ్య లాక్ మరియు రికార్డ్ చరిత్రను బదిలీ చేయాలి. ఆబ్జెక్ట్ ఫార్మాట్ మారదు: మేము స్థానికంగా నిల్వ చేయబడిన అదే గుప్తీకరించిన బైట్‌లు మరియు సంతకాలను బదిలీ చేస్తాము.

మాన్యువల్ బదిలీ కోసం, అప్లికేషన్ లాక్‌ని కలిగి ఉన్న ZIP ఆర్కైవ్‌ను సృష్టిస్తుంది, అన్ని స్థానికంగా నిల్వ చేయబడిన ఎన్‌క్రిప్టెడ్ రికార్డ్ వెర్షన్‌లు మరియు సంతకం చేసిన ఫైల్ జాబితా. పాస్‌వర్డ్ లేదా secret_key చేర్చబడలేదు. మరొక పరికరంలో, అప్లికేషన్ మొదట లాక్‌ని తెరుస్తుంది, ఆపై సంతకాలను తనిఖీ చేస్తుంది, రికార్డ్‌లను డీక్రిప్ట్ చేస్తుంది మరియు స్థానిక వాల్ట్ కాపీని పునరుద్ధరిస్తుంది. ఈ వాల్ట్ ఇంకా ఉనికిలో లేని పరికరం కోసం దిగుమతి ఉద్దేశించబడింది; ఇది ఇప్పటికే ఉన్న కాపీతో చరిత్రను విలీనం చేయదు.

సమకాలీకరణ సర్వర్ వర్కింగ్ కాపీల మధ్య మార్పులను మార్పిడి చేస్తుంది. మొదటి అప్‌లోడ్‌లో, ఇది సంతకం చేసిన లాక్‌ని అందుకుంటుంది, సంతకాన్ని తనిఖీ చేస్తుంది మరియు signing_key పబ్లిక్ భాగం నుండి పబ్లిక్ వాల్ట్ చిరునామాను గణిస్తుంది. ఇది హెడర్ నుండి ఈ కీ మరియు వాల్ట్ ఐడెంటిఫైయర్‌ను గుర్తుంచుకుంటుంది: ఇది సర్వర్‌లో వాల్ట్‌ను నమోదు చేస్తుంది. తదుపరి మార్పులు తప్పనిసరిగా ఈ ఐడెంటిఫైయర్‌తో సరిపోలాలి మరియు అదే కీ నుండి సంతకాన్ని కలిగి ఉండాలి.

కొత్త పరికరానికి వాల్ట్ చిరునామా మరియు secret_key అవసరం, కాబట్టి అప్లికేషన్ వాటిని చెక్‌సమ్‌తో బదిలీ కోడ్‌గా మిళితం చేస్తుంది. వినియోగదారు ఈ కోడ్‌ని పరికరానికి బదిలీ చేస్తారు మరియు మాస్టర్ పాస్‌వర్డ్‌ను విడిగా నమోదు చేస్తారు; పబ్లిక్ చిరునామా మాత్రమే సర్వర్‌కు పంపబడుతుంది.

డౌన్‌లోడ్ చేయబడిన లాక్‌ని తెరిచిన తర్వాత, అప్లికేషన్ పునరుద్ధరించబడిన కీల యొక్క పబ్లిక్ భాగాలను secret_key మరియు హెడర్‌తో పోల్చి, బదిలీ కోడ్‌తో కంప్యూటెడ్ చిరునామాను తనిఖీ చేస్తుంది. ఇది రికార్డ్‌లను తనిఖీ చేయడానికి signing_key యొక్క ధృవీకరించబడిన పబ్లిక్ భాగాన్ని సేవ్ చేస్తుంది.

సమకాలీకరణ సమయంలో, అప్లికేషన్ తప్పిపోయిన సంస్కరణలను పొందుతుంది మరియు దాని మార్పులను అప్‌లోడ్ చేస్తుంది. సర్వర్ సంతకాలు మరియు మునుపటి సంస్కరణలకు లింక్‌లను తనిఖీ చేస్తుంది, ఆమోదించబడిన వస్తువులను నిల్వ చేస్తుంది మరియు వాటిని ఇతర పరికరాలకు పంపుతుంది. అందుకున్న డేటాను తనిఖీ చేయడం, దానిని డీక్రిప్ట్ చేయడం మరియు వైరుధ్యాలను పరిష్కరించడం అన్నీ వినియోగదారు పరికరాలలో జరుగుతాయి.

రిజిస్ట్రేషన్ పేరు, ఇమెయిల్ చిరునామా లేదా ప్రత్యేక పాస్‌వర్డ్ అడగదు. సర్వర్ పబ్లిక్ అడ్రస్, సిగ్నేచర్ వెరిఫికేషన్ కీ, పబ్లిక్ హెడర్‌లు, ఆబ్జెక్ట్ సైజులు మరియు వెర్షన్ లింక్‌లను చూస్తుంది. ఇది IP చిరునామాలు మరియు అభ్యర్థన సమయాలను కూడా చూస్తుంది. ప్రధాన పాస్‌వర్డ్, secret_key, ప్రైవేట్ కీలు మరియు సాదా వచన రికార్డ్ కంటెంట్‌లు వినియోగదారు పరికరాలలో ఉంటాయి. పబ్లిక్ చిరునామా తెలిసిన ఎవరైనా గుప్తీకరించిన వస్తువులను డౌన్‌లోడ్ చేసుకోవచ్చు, కానీ వాటిని చదవడానికి వినియోగదారు రహస్యాలు అవసరం.

ఈ తనిఖీలు నకిలీ వస్తువులను గుర్తించాయి, కానీ సర్వర్ పూర్తి చరిత్రను మరియు దాని తాజా స్థితిని చూపిందని నిరూపించలేదు. ఇది క్లయింట్ ఎన్నడూ చూడని బ్రాంచ్‌ను దాచగలదు లేదా స్థిరమైన పాత డేటాసెట్‌ను తిరిగి ఇవ్వగలదు. ఒక సంతకం వ్యక్తిగత వస్తువు యొక్క ప్రామాణికతను నిర్ధారిస్తుంది, సర్వర్ ప్రతిస్పందన యొక్క సంపూర్ణతను కాదు. వినియోగదారు మరొక పరికరంలో తప్పిపోయిన మార్పులను గమనించవచ్చు, కానీ స్థిరమైన పాత చరిత్ర hash-chain ధృవీకరణను పాస్ చేస్తుంది.

మాస్టర్ పాస్‌వర్డ్‌ను మార్చడం

కాబట్టి, మీ పవిత్రత ఆమె పాస్‌వర్డ్‌ను మార్చడానికి శ్రద్ధ వహిస్తారా?

హ్యాకర్లు (1995)

మాస్టర్ పాస్‌వర్డ్‌ను మార్చడం వలన లాక్‌ని మాత్రమే రీ-ఎన్‌క్రిప్ట్ చేస్తుంది; లోపల master_key అలాగే ఉంటుంది. రికార్డులు, వాటి సంతకాలు, secret_key మరియు వాల్ట్ చిరునామా మారవు. కొత్త లాక్ అదే signing_keyతో సంతకం చేయబడింది.

పాత లాక్ కాపీ ఇప్పటికీ పాత పాస్‌వర్డ్‌తో తెరవబడుతుంది మరియు అదే secret_key; పాస్‌వర్డ్‌ను మార్చడం వలన ఇప్పటికే బహిర్గతం చేయబడిన కీలు ఉపసంహరించబడవు.

పూర్తి చిత్రం

లాక్ master_keyని రక్షిస్తుంది, message_key రికార్డ్‌లను గుప్తీకరిస్తుంది మరియు signing_key సంతకాలను సృష్టిస్తుంది. ZIP ఆర్కైవ్‌లు మరియు సర్వర్ సంతకాలతో గుప్తీకరించిన వస్తువులను స్వీకరిస్తాయి.

public bytes public bytes public bytes master_key Fresh randombytes secret_key record_key Master password wrapping_key signing_key message_key lock Encrypted records Signed lockand records Signatureverification ZIP archive /sync server public bytes public bytes public bytes master_key Fresh randombytes secret_key record_key Master password wrapping_key signing_key message_key lock Encrypted records Signed lockand records Signatureverification ZIP archive /sync server
కీలు, అవి ఏమి రక్షిస్తాయి మరియు ఏమి భాగస్వామ్యం చేయవచ్చు.