Sunt un începător în criptografie. Am proiectat un algoritm de criptare-decriptare bazat pe parolă, care utilizează o sare aleatorie și o parolă pentru a cripta un mesaj. Folosesc SHA-512 pentru hashing, operații de matrice pentru amestecare, XOR bit, pentru amestecarea datelor și recuperarea. Lungimea sării și a textului cifrat este de 256 de litere.
Din câte știu eu, efect de avalanșă înseamnă că o ușoară modificare în oricare dintre următoarele:
- cifrare
- parolă
- salt
trebuie să schimbe drastic ieșirea.
În implementarea mea, dacă schimb sarea sau cifrul, nu văd nicio schimbare mare în ieșire. Cu toate acestea, atunci când există o ușoară modificare a parolei, rezultatul se schimbă drastic.
Deci, întrebările mele:
- Înțelegerea mea despre efectul avalanșei este în general corectă? Dacă nu, ce ar trebui să fie?
- Ce pot face pentru a produce cel mai bine efectul de avalanșă în cifrul meu (sau în vreunul)? ar trebui să reduc mai puțin lungimea sării și să generez un text cifrat mai mic pentru a crea un efect de avalanșă? Dacă nu, atunci cum pot realiza acest lucru?
Comentarii
- Din curiozitate, la ce folosești hash-ul?
- Bine ați venit la Cryptography Stack Exchange. @Avinash, întrebarea dvs. a fost migrată aici, deoarece este mai mult subiect aici decât în Stack Overflow. Vă rugăm să vă înregistrați contul aici pentru a putea comenta și accepta un răspuns.
- Dacă doriți răspunsuri constructive, ar trebui să arătați cum funcționează cifrul dvs. în prezent (în formule matematice, de preferat). Apoi, putem arunca o privire pentru a vedea cum să-l îmbunătățim.
- Am ‘ am eliminat comentariile de-a lungul liniei ” nu ‘ nu proiectați propriul dvs. cifru ” – aici pe crypto ‘ s perfect acceptabil să încercați, deși ar trebui să înțelegeți că totul este pe propriul risc, desigur 🙂 Am ‘ de asemenea am editat puțin întrebarea pentru a mă concentra mai mult pe efectul avalanșei în absență a construcțiilor cifrate relevante. Dacă cineva consideră că acest lucru nu este necesar, nu ezitați să reveniți sau să îmbunătățiți ceea ce am ‘ făcut.
Răspundeți
Nu vă deranjați să schimbați algoritmul de cifrare real. Citiți despre principiul Kerckhoffs : ar trebui să schimbați doar lucruri precum cheia și IV, nu algoritmul propriu-zis.
Pentru a vă testa avalanșa, întoarceți un bit în cheie. Aceasta ar trebui să schimbe aproximativ jumătate din biții din ieșirea dvs.
Pentru proiectarea cifrelor, Criptografia aplicată a fost deja sugerată. În plus, trebuie să vă uitați la introducerea difuziei și confuziei în algoritmul dvs. De asemenea, merită, în timp ce studiați algoritmii existenți, să vedeți cum merg lucrurile. Am început prin proiectarea propriului meu cifru Feistel , astfel o mulțime de structuri înconjurătoare sunt deja realizate pentru dvs. De asemenea, simplifică proiectarea, prin faptul că funcția F nu trebuie să fie inversabilă. Acest lucru vă permite mult mai multă flexibilitate în acea zonă.
Avertismentul cu privire la faptul că nu utilizați propriul design pentru altceva decât un exercițiu de învățare este unul bun.
Comentarii
- Mulțumesc mult …
- Cifrarea / cifrarea este o problemă din Marea Britanie / SUA.
Răspunde
Cred că este extraordinar să-ți construiești propriul algoritm de criptare-decriptare. Veți afla multe despre criptare în acest fel. Până acum, toți cei care construiesc un algoritmul de criptare-decriptare cripto construiește ceva oribil defect într-un fel sau altul – foarte educațional – prima dată.
terminologie
Dacă vă înțeleg corect întrebarea, aveți un perfect întrebare rezonabilă cu privire la efectul avalanșei, dar majoritatea persoanelor de pe acest site sunt atât de confuze în ceea ce privește terminologia dvs. nestandardă, încât nici măcar nu pot înțelege ceea ce cereți. construiți un sistem de criptare-decriptare care ia text simplu ca intrare, stochează date ca fișiere criptate și apoi permite mai târziu cuiva cu parola corectă să decripteze acele fișiere stocate și să recupereze text clar decriptat bit-pentru-bit identic cu intrarea textului original original. probabil știu deja, un program tipic de criptare creează fișiere criptate care încep cu un vector de inițializare (IV) care a fost proaspăt generat de un generator de numere aleatorii sigure criptografic când a fost creat fișierul criptat.Programul de criptare apoi împarte fișierul de intrare în blocuri de text simplu ale unor blocuri fixate , folosește unele moduri de divizare bloc de funcționare în „modul de criptare” pentru a procesa fiecare bloc (și cheia de criptare) printr-un cifru de bloc pentru a ajunge în cele din urmă cu un bloc criptat de aceeași dimensiune blocată, care este anexată la fișierul criptat. La sfârșit sunt adesea niște biți dificili, legați de „umplere” și „autentificare mesaj”.
Mai târziu, programul de decriptare împarte fișierul criptat în blocuri criptate cu același bloc fix, alimentează fiecare bloc ( și cheia de criptare) prin cifrarea blocului utilizând același mod de funcționare a cifrării blocului în „modul decriptare” pentru a recupera blocul text simplu și concatenează toate blocurile text simplu împreună pentru a recupera un fișier bit pentru bit identic cu fișierul text original .
Eu „folosesc SHA-512 pentru hashing
OK, SHA-512 este un algoritm de hash excelent. Dacă utilizați acest lucru ca parte a funcției rotunde interne sau pentru a genera chei secundare din cheia principală de criptare, acesta ar funcționa; pare pur și simplu inutil de complicat.
Dacă utilizați SHA-512 ca o funcție de derivare a cheii (KDF) pentru a genera cheia principală de criptare din parolă, mulți oameni ar spune că nu este „suficient de complicată.
operațiile matricei pentru amestecarea
Acest lucru este neobișnuit, dar asta ar putea funcționa.
XOR bitwise pentru amestecarea datelor și recuperarea.
Practic, toți algoritmii moderni de criptare utilizează o mulțime de operații XOR bitwise. Mulți algoritmi moderni de criptare sunt concepuți pentru a utiliza doar adaosuri modulare, rotație cu cantități fixe de rotație și XOR (ARX) în bucla interioară (iterație rotundă).
Sunt destul de o funcție rotundă interioară care folosește Rotația numai XOR sau numai sau adăugarea modulară numai va fi fatală, indiferent de câte iterații rotunde sunt folosite.
(Nu știu suficient pentru a spune nimic despre siguranța combinației dvs. particulare de operații XOR și matrice).
Lungimea sare și textul cifrat este de 256 de litere.
Presupun că ai vrut să spui „Lungimea vectorului de inițializare (IV) și fiecare bloc de text cifrat este de 256 de litere . „
O” sare „este utilizată în hashing criptografic unidirecțional – consultați Puteți să mă ajutați să înțeleg ce este un sare ” este? . Un „IV” este utilizat în criptografie bidirecțională – atât criptare, cât și decriptare. Atât „sare”, cât și „IV” sunt valori aleatorii proaspăt generate care se presupune că sunt cunoscute public, dar terminologia sugerează că vor fi utilizate în diferite tipuri de sisteme.
Aproape toată lumea stabilește lungimea IV-ul egal cu dimensiunea blocurilor, așa că „e grozav.
Înțeleg că practic toate cifrele dezvoltate înainte de anunțul concursului AES din 1997 au folosit o dimensiune de bloc de 64 de biți (8 octeți) sau mai puțin. Unii criptografi Se pare că nu a fost suficient, dar, din câte știu, toată lumea pare să considere că o dimensiune blocată de 128 biți (16 octeți) este adecvată.
O dimensiune blocată de 256 octeți ar funcționa; pare doar inutil de mare.
efectul avalanșă
Când rulați fiecare bloc de text simplu prin cifrarea blocului (în unele moduri de criptare), efectul avalanșă înseamnă că o singură modificare a bitului în oricare dintre următoarele:
- datele din blocul text simplu
- parola
- IV
trebuie să schimbe blocarea textului cifrat de ieșire drastic (aproximativ jumătate din biți).
Când rulați fiecare bloc de text cifrat prin cifrul bloc (în unele moduri de decriptare), efectul avalanșă înseamnă că un singur bit se modifică în oricare dintre următoarele:
- bloc de text cifrat
- parola
- IV
trebuie să schimbe drastic blocul „text simplu” de ieșire (aproximativ jumătate din biți).
În implementarea mea, dacă schimb sarea sau cifrul, nu văd nicio modificare mare în ieșirea mea.
Presupun că ai vrut să spui unul dintre cele două lucruri:
- „dacă schimb un singur bit lângă începutul o f fișierul criptat (de exemplu, în IV sau într-un anumit bloc de text criptat), nu văd nicio schimbare mare spre sfârșitul fișierului meu text de ieșire.
Această lipsă de schimbarea se întâmplă întotdeauna când se utilizează (sigur) Cipher Block Chaining (CBC) sau alte moduri de operare. Deci nu este neapărat o problemă.
Totuși, aceasta poate fi o problemă dacă ați crezut că utilizați modul (securizat) de propagare a cifrelor în bloc (CIP), unde această lipsă de schimbare indică o eroare în implementare.
De asemenea, această lipsă de modificare este rezultatul așteptat atunci când se utilizează modul (nesigur) Electronic Codebook (ECB).
Indiferent de modul de operare selectat, programul de decriptare ar trebui să imprime mari avertismente înfricoșătoare că fișierul nu a reușit verificarea autentificării MAC ori de câte ori un singur bit din fișierul criptat este deteriorat.
- „dacă schimb un singur bit într-un un singur bloc de text criptat criptat într-un fișier criptat, nu văd nicio modificare mare în blocul de text simplu corespunzător în fișierul meu de text simplu de ieșire. „
Da, acest lucru indică o eroare gravă – algoritmul de cifrare bloc nu are un efect bun de avalanșă. Acesta este un semn că algoritmul nu are o amestecare suficientă. Acest lucru înseamnă, în general, că sistemul este vulnerabil la atac ales-cifrat și la atacuri similare.
Ce pot face pentru a produce cel mai bine efectul de avalanșă în cifrul meu (sau în vreunul)? ar trebui să reduc mai puțin lungimea sării și să generez un text cifrat mai mic pentru a crea un efect de avalanșă?
Presupun că ai vrut să întrebi „ar trebui să reduc dimensiunea IV și dimensiunea blocului pentru a crea un efect de avalanșă? „
Acest lucru nu este în general necesar.
Cele mai comune abordări pentru a produce efectul de avalanșă sunt listate în Wikipedia bloc cifrat articol:
Nu știu niciun cifru bloc care să producă o avalanșă completă după o singură rundă. Persoanele care proiectează cifrări de blocuri încearcă să aleagă un număr de runde suficient pentru a face ca cifrarea blocului să reziste tuturor atacurilor criptografice standard , ceea ce este mai mult decât suficient pentru a produce o avalanșă completă .
Persoanele care proiectează un cifru de bloc aleg de obicei o schemă generală de proiectare a cifrelor de bloc și fac ca programul de cifrare de blocuri să-l itereze peste și peste numărul selectat de runde. Unele dintre cele mai populare scheme generale de proiectare a cifrelor de blocuri sunt:
- rețea de substituție-permutare
- cifrare Feistel
- cifrare Lai-Massey
Fiecare dintre acestea necesită o funcție internă neliniară. Cifrele de blocare timpurii utilizează adesea o funcție internă complicată pe fiecare rundă care aproape realizează avalanșă într-o singură rundă. Cifrele moderne folosesc adesea o funcție internă foarte simplă și rapidă, fiecare rundă (câteva funcții ARX) cu neliniaritate suficientă pentru a obține în cele din urmă avalanșă după un număr mare de runde.
Comentarii
- Notă laterală: cifrul khazad are o difuzie completă după o singură rundă. ‘ am creat jucării care o fac și ele, este cu siguranță posibil ‘ și este distractiv să descoperiți modalități de a face acest lucru.