În cazul blocului unic (OTP), cea mai simplă schemă de criptare refuzată ar putea folosi utilizarea unui Mesaj Momeală și Cheie Momeală care creează o Text cifrat universal asta va fi la fel Ciphertext universal care va fi XORed cu Mesaj real, rezultând determinist Cheie adevărată (cu condiția ca lungimea mesajului real să fie cel puțin la fel de lungă ca mesajul momeală și cheile rezultate și textul cifrat pentru a evita necesitatea umplerii).
- Dezavantajul va fi tratarea biților de text simplu ca o cheie privată, în sensul de
generarea unei chei sigure (Cheie adevărată), deoarece este complet derivat din punct de vedere determinist din a
„text simplu” denumit aici Real
Mesaj.
Astfel, securitatea cheii reale în biți va depinde de
aleatorie și lungime (și orice securitate rezultată sau moștenită) a mesajului real
în biți (deci mesajul trebuie tratat la propriu și la figurat ca o cheie privată în ceea ce privește securizarea întregului sistem pentru ca mesajul real să fie securizat, deoarece nu este „securizat” cu cheia privată (mai degrabă cheia privată este fiind creat din mesaj). Mai jos este un exemplu:
pl= cheie momeală
k1= mesaj momeală
c1 = text cifrat universal
p2= cheie reală
k2= mesaj real
p1âk1 =c1
c1âk2 = k1
*Mesaj momeală (lungimea n) â Cheie momeală (lungimea n) = Text cifrat universal (lungimea n)
*Universal Ciphertext (lungimea n) â Mesaj real (lungimea n) = Cheie reală (lungimea n)
Opinie: O astfel de metodă de criptare pentru o negație plauzibilă ar putea funcționa (secret perfect și securizare cuantică) dacă mesajul în sine era suficient de aleatoriu și cu condiția ca lungimea sa în biți să nu fie fezabilă pentru a ghici sau a se ciocni cu forța brută (adică mesajul real ar putea fi un privat cheia însăși care a fost generată de un CSPRNG) și lungă de 128 de biți, de exemplu. Altfel, un mesaj real scurt sau previzibil, ar produce o cheie reală care nu este sigură.
Ipoteze importante de securitate: pentru un mesaj real suficient de sigur (text simplu), cum ar fi un număr întreg de 256 de biți generat de CSPRNG, cheia reală rezultată care este calculată după XOR-ul față de textul cifrat universal, unde rădăcina pătrată a [spațiu mesaj * spațiu cheie] = Spațiul de text cifrat (inclusiv duplicatele este 2^512 din cauza comutativității lui XOR), din care vor exista de cel puțin atâtea ori (2^256) alte mesaje și chei, vor produce același text cifrat universal. Astfel, nu există nicio modalitate de a ști care mesaj sau cheie este cea în cauză deoarece toate vor părea valide, fără a avea cunoștințe prealabile despre cheia reală, dacă mesajul (tratat ca un generator de chei) este suficient de sigur.Această limită/interval este guvernată de numărul de ecuații XOR distincte care există (fără permutare) pentru orice interval arbitrar de numere întregi reale (adică n=256) următoarea secvență A028401.
Exemplu de cod Python pentru a calcula XOR distinct:
Initial_bits= int(input("introduceți numărul de biți"))
Initial_number_range= 2**Initial_bits
Unique_XOR_triplets=((Initial_number_range+1)*(Initial_number_range_range+2))//6
Total_triplet_input_terms =((Initial_number_range//2)+1)*(Initial_number_range)+(Initial_number_range//2)+1
Repeat_Groups=(Total_triplet_input_terms)-((Initial_number_range**2)//2)-Initial_number_range
Checksum_repeat_group=(Initial_number_range//2)+1
print('1: Initial_bits, acesta va deveni exponentul pentru 2 ridicat la această putere:',Initial_bits)
print('2: Initial_number_range, doi mariti la numarul de biti initiali este egal cu acesta:',Initial_number_range)
print('3: Unique_XOR_triplets, trei termeni de intrare contează ca unul:',Unique_XOR_triplets)
print('4: Total_triplet_input_terms (adică A XOR B = C ar fi trei termeni de intrare):',Total_triplet_input_terms)
print('5: Repeat_Groups, fiecare număr din grup se repetă de mai multe ori și un în plus de atâtea ori de zero:',Repeat_Groups)
Cod Python cu schemă de criptare plauzibilă de negare folosind șiruri nesigure de 56 de biți ca exemplu:
P1 = 0B011010000110010101101100011011000110111000000000000000000 #PLAINTEXT1 Mesaj manechin 56-bit Exemplu ASCII pentru "Hello" Padded la lungimea mesajului real: 0B01101000011001010110110001101100011011110000000000000000
p1=bin(p1)
k1= 0b10011001100110011001100110011001100110011001100110011000 #key1 Exemplu de CHEIE MANCHISĂ pe 56 de biți: 0b10011001100101010101010101010101010101010
k1=bin(k1)
c1= int(p1,2)^int(k1,2) #ciphertext (calculat DETERMINISTIC pe 56 de biți derivat din mesajul fals XOR cu cheie falsă): "0b1111000111111100111101011111010111110110101001"
c1=bin(c1)
p2= 0b01101100011001010110000101110110011010010110111001100111 #plaintext2 MESAJ REAL Exemplu ASCII pe 8 biți pentru „plecare” : 0b011010101010101010101010101010101010
p2=bin(p2)
k2= int(c1,2)^int(p2,2) #key2 REAL KEY ((calculat DETERMINISTIC) 56 de biți derivat din text cifrat XOR cu mesaj real: 0b1001110110011001100101001000001110011111111111111
k2=bin(k2)
print('P1 MESAJUL MANECIN este:',p1)
print('K1 DUMMY KEY este:',k1)
print('c1 UNIVERSAL CIPHERTEXT este:',c1)
print('MESAJUL REAL P2 este:',p2)
print('k2 REAL KEY este:',k2) ## această „cheie” este deterministă, deci la fel de puternică ca aleatorietatea mesajului
print('mesajul real p2: ', (p2),
„este cu adevărat”,(int(p2,2))== int(k2,2)^int(c1,2))
print('as c1 ',c1,'xor p2', p2, 'equals',bin(int(k2,2)), 'este cu adevărat')
print((int(k2,2)==(int(c1,2)^(int(p2,2)))))
print('și este egal cu ',bin(int(c1,2)^(int(p2,2))))