Puncte:0

spargerea unui tampon unic folosind reutilizarea cheilor

drapel cn

Există un pad unic care funcționează după cum urmează: dat mesajul „hello” și cheia „asdfg”, acesta produce „hwoqu”. Funcționează doar cu cele 26 de litere engleze. Ieșirea este (h(7) + a(0))%26 = h(7), (e(4) + s(18))%26 = w(22) etc.

Deci am două texte cifrate create ca mai sus folosind o singură cheie pentru ambele texte cifrate. Ar trebui să pot sparge textele simple fără a avea nevoie de acces la cheie.

Care este procedura pentru a face asta?

Până acum, am încercat să trimit XOR cele două texte cifrate, adică pentru fiecare literă din c1 și c2, convertiți la valoarea sa numerică corespunzătoare și XOR a n-a literă a lui c1 cu a n-a literă a c2, pentru a genera c3.

Apoi ar trebui să-l folosesc cu un cuvânt ghicitor ca „the” exorându-l împotriva c3.Aceasta este partea în care sunt blocat, nu știu ce ar trebui să caut aici.

Editați | ×:

Deci, deoarece este mai degrabă o adăugare decât un XOR, iată ce am scris:

c1 = „ujhantamawmuzvgkterrykub”
c2 = „bpgxmkymbbpyxmogoehdefgh”

pad criptează și decriptează:

def oneTimePad(mesaj, cod):
    message_out = ""
    pentru eu în rază (len (mesaj)):
        
        index = (litere.găsește(mesaj[i]) + litere.găsește(cod[i]))%26
        mesaj_out+= litere[index]

    return message_out

def otpDecrypt(cifr, cheie):
    message_out = ""

    pentru i în interval (len (cheie)):
        index = (litere.găsiți(cifr[i]) - litere.găsiți(cheie[i]))%26
        mesaj_out+= litere[index]
    return message_out

biscuitul:

def padCracker(m1, m2, ghici): # m1, m2 listă de numere
    m3 = listă(hartă(lambda x, y: (x + y) %26, m1, m2))
    verifica = [] # m3 + ghici mod 26
    guessNum = listă(hartă(lambda c: letters.find(c), guess))
    pentru i în interval(len(m3)-len(ghici)+1):
        verificare = listă(hartă(lambda x, y: (x+y)%26, guessNum, m3[i: i+len(ghici)]))
        print(verificare, sfârşit="")
        
        șir = ""
        pentru num in check:
            șir += litere[num]

        print(șir)       


print(padCracker(m1,m2, "bcd"))

asta sugerează că c1 începe cu „the” și c2 cu „și” cu cheia „bcd”, dar nu știu cum să obțin restul cheii

SAI Peregrinus avatar
drapel si
Sugestie: criptarea folosește XOR? Ce folosește? Cum se leagă asta textele cifrate?
Shiny_and_Chrome avatar
drapel cn
Presupun că acest lucru nu folosește de fapt XOR. Pur și simplu adaugă cheie și literă de text simplu, la fel ca un cifru vigenere. Deci, care este procedura pentru a anula apoi cifrul vigenere și cum folosesc relația dintre c1 și c2 pentru a ajunge la textul simplu?
SAI Peregrinus avatar
drapel si
Se adaugă literă keystream și literă text simplu mod 26. Decriptarea este aceeași. Relația de a efectua atacurile obișnuite de două ori cu pad (de exemplu, tragerea pătuțului) este să adăugați textul cifrat mod 26. https://crypto.stackexchange.com/questions/59/taking-advantage-of-one-time-pad -key-reuse are mai multe răspunsuri bune.
Shiny_and_Chrome avatar
drapel cn
multumesc, a ajutat foarte mult. Așa că adaug literele celor două texte cifrate pentru că asta s-a făcut în timpul criptării, în timp ce dacă ar fi fost XOR, aș face și XOR-ul celor două texte cifrate? Dacă înțeleg corect tragerea pătuțului, iau un cuvânt ghicitor precum „the” sau „and” sau „have”, îl convertesc în valoarea sa numerică, apoi adaug fiecare literă la litera corespunzătoare din c3, dacă rezultatul este ceva lizibil, atunci asta îmi oferă un alt potențial cuvânt de ghicire pentru a construi apoi care este mesajul.
SAI Peregrinus avatar
drapel si
Da. Acesta este practic același OTP ca în mod normal, doar cu XOR pe biți înlocuit cu modul de adăugare 26 pe literele englezești.
Shiny_and_Chrome avatar
drapel cn
Încă nu reușesc să pun blestemul să funcționeze. Am făcut c3 = (c1+c2) % 26, apoi (c + ghici) % 26, dar nu știu unde să merg de acolo. Toată chestia cu pătuțul nu face clic. Mi-am actualizat postarea inițială pentru a arăta ce am încercat.

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.