Puncte:2

Utilizarea spațiului alb pentru a întrerupe cifrul fluxului de mai multe ori

drapel th

Am o întrebare despre prima sarcină de programare din cursul de criptografie al lui Dan Boneh pe Coursera. Vi se oferă 10 texte cifrate care au fost criptate cu aceeași cheie și probabil că puteți presupune că textul simplu constă numai din litere și spații albe.

Sugestia arată că ar trebui să luați în considerare ce se întâmplă atunci când un spațiu alb este marcat cu o literă. Ideea este să verificăm dacă subpărțile xor-ed ale combinațiilor de text cifrat corespund unei litere, ceea ce ar trebui să ne permită să aflăm cheia.

Dacă găsim o scrisoare, cred că ar trebui să putem recupera acea parte a cheii, care corespunde scrisorii pe care o procesăm în prezent, făcând următoarele:

Lăsa c_sub1 și c_sub2 să fie subpărțile textelor cifrate c1 și c2 pe care în prezent verificăm și lăsăm m_sub1 și m_sub2 fie sub-părțile corespunzătoare ale textelor clare. Unul dintre m_sub1 sau m_sub2 trebuie să fie un spațiu alb. Pentru a ne da seama care dintre ele, încercăm următoarele: Presupunând m_sub1 este un spațiu alb, obțineți sub-partea corespunzătoare a cheii (k_sub) prin xor-ing c_sub1 cu 00100000 (reprezentarea binară a unui caracter alb), k_sub = xor(c_sub1,00100000), și verificați dacă criptarea literei inversate cu majuscule și minuscule (deoarece xor-ing cu un spațiu alb inversează majusculele unei litere) cu k_sub randamente c_sub2, dacă o face, ar trebui să știm asta k_sub este sub-partea corectă a cheii. Dacă nu, încercați același lucru presupunând că m_sub2 este un spațiu alb.

Nu găsesc nicio greșeală logică în acest raționament, dar implementarea mea dă o soluție incorectă și sunt destul de sigur că am eliminat toate celelalte posibilități de erori. Imi poate spune cineva daca aceasta abordare este gresita, va rog?

Puncte:1
drapel in

verificați dacă criptarea literei inversate cu majuscule (deoarece xor-ing cu un spațiu alb întoarce majusculele unei litere) cu k_sub produce c_sub2, dacă o face, ar trebui să știm că k_sub este sub-partea corectă a cheii. Dacă nu, încercați același lucru presupunând că m_sub2 este un spațiu alb

În prezent, asociați două fluxuri de text cifrat, în timp ce aveți 10 dintre ele. Ar trebui să alegeți un flux din 10 și apoi să efectuați XOR cu toate celelalte 9 în aceeași poziție. Dacă majoritatea acestor fluxuri returnează litere (și nicio combinație nevalidă a unui XOR - dar este mai greu de testat), atunci puteți fi destul de sigur că caracterul criptat este un spațiu și puteți găsi cheia după XOR-ul pe care îl efectuați în răspunsul dvs. .

Cred că ar putea fi cazul în sarcina lui Boneh, dar aveți grijă că puteți întâlni combinații de text simplu care împreună pot produce și o scrisoare. Deci nu puteți pur și simplu să efectuați un XOR cu două fluxuri și să vă validați ipoteza în acest fel. Cu cât ai mai multe fluxuri, cu atât ești mai sigur; în cele din urmă, puteți valida, desigur, uitându-vă și la mesajele text simplu și/sau folosiți-vă abilitățile lingvistice pentru a completa spațiile libere.


Dacă îmi amintesc bine, am luat-o puțin diferit. Am luat un flux, am repetat peste toate caracterele din alfabet (notă: caracterele posibile de intrare se numesc aici „alfabetul”, nu mă refer la ABC) pentru fiecare poziție, apoi le-am XOR pe toate trei împreună. Dacă toate fluxurile au rezultat în alfabet, atunci am lovit caracterul potrivit. Acest lucru vă permite să gestionați doar caracterele din alfabet, nu combinațiile XOR ciudate.

Dacă sunt găsite mai multe caractere, atunci utilizați-l pe cel care produce cele mai utilizate caractere în toate fluxurile împreună (analiza de frecvență).

Dacă tot nu dă rezultate, puteți încerca și alte fluxuri (desigur, ar trebui să comparați doar fluxul 2 cu 8 fluxuri, deoarece ați comparat deja #1 și #2).


OK, să presupunem că avem prima poziție (pozițiile nu sunt indicate în numele variabilelor) și un set de fluxuri. Acum să începem cu primul flux și XOR-l cu toate celelalte fluxuri, notate cu $y$ Unde $y != 1$.

Aveți o pereche de două valori criptate care constau în $c_1 = p_1 \oplus k$ și $c_y = p_y \oplus k$. Deci XOR-ul împreună vă oferă $r = c_1 \oplus c_y = p_1 \oplus p_y$ (nimic nou aici). Acum, dacă ghiciți $p_1$ și cheamă-l $p'_1$ ai primi $p'_1 \oplus p_1 \oplus p_y = p'_y$. Acum dacă $p'_y$ este un caracter invalid atunci evident $p'_1$ a fost o presupunere greșită. Dacă aveți ghinion, atunci trebuie să efectuați o analiză de frecvență a tuturor rezultatelor $p'_y$. Dar amintiți-vă că puteți face asta cu toate $\binom{n+1}2$ perechi înainte de a recurge la asta.

Odata ce ai $p'_1 = p_1$ atunci, evident, cheia este doar XOR cu caracterul ciphertext: $c_1 \oplus p_1 = k$. Asta înseamnă că trebuie doar să iterați peste alfabet, mai degrabă decât toate cheile, și puteți respinge rapid încercările proaste.

eager2learn avatar
drapel th
Multumesc pentru raspunsul tau. Am câteva întrebări:
eager2learn avatar
drapel th
„Atenție că s-ar putea să întâlniți combinații de text simplu care împreună pot produce și o literă. Așa că nu puteți pur și simplu să efectuați un XOR cu două fluxuri și să vă validați ipoteza în acest fel”. Mă gândeam la asta, dar nu înțeleg cum ați valida acest lucru cu mai multe fluxuri. Ar trebui doar să numărați pentru fiecare poziție din cheie care cheie a rezultat din xor-ing două perechi de text cifrat și apoi să alegeți subsecvența de cheie care apare cel mai frecvent?
eager2learn avatar
drapel th
„ Am luat un flux, am repetat peste toate caracterele din alfabet (notă: caracterele posibile de intrare se numesc aici „alfabetul”, nu mă refer la ABC) pentru fiecare poziție, apoi le-am XOR pe toate trei împreună. Dacă toate fluxurile au produs rezultate în alfabet, apoi am lovit caracterul potrivit." De ce faci trei secvențe aici, citatul menționează doar un flux și apoi un personaj în fiecare iterație? De asemenea, nu înțeleg de ce xor-ing un element din alfabet cu o sub-secvență de texte cifrate ar trebui să rezulte într-o literă
Maarten Bodewes avatar
drapel in
S-a adăugat o explicație cu XOR-ul real.
eager2learn avatar
drapel th
Mai am o întrebare: în abordarea dvs., cum știu dacă elementul din alfabet pe care l-am ghicit corect ($p'_1=p_1$) corespunde cu $c_1$ sau $c_y$?
Maarten Bodewes avatar
drapel in
Nu, dar devine mai probabil atunci când celelalte fluxuri returnează rezultatele așteptate. Acesta este întotdeauna cazul, desigur. Imaginați-vă că toate fluxurile au același caracter într-o anumită locație...Acest lucru ar fi imediat evident din textul cifrat, dar *care* caracter rămâne necunoscut - îl puteți ghici doar din restul mesajelor text simplu pe care *le puteți* recupera.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.