Puncte:0

Unde pot găsi vectori de testare pentru ChaCha20 (încercând să înțeleg exemplul Wikipedia)?

drapel cn

Mă jucam cu cifrurile de flux și găsim acest Pagina Wikipedia ChaCha20 (varianta ChaCha). Ceea ce am pierdut este cum să testez acest cod. Nu există vectori de testare nicăieri pe pagina respectivă și nu pot găsi niciunul. Am scris următorul cod C:

#definiți ROTL(a,b) (((a) << (b)) | ((a) >> (32 - (b))))
#definiți QR(a, b, c, d) ( \
    a += b, d ^= a, d = ROTL(d,16), \
    c += d, b ^= c, b = ROTL(b,12), \
    a += b, d ^= a, d = ROTL(d, 8), \
    c += d, b ^= c, b = ROTL(b, 7))
#define RUPELE 20

void chacha_block(uint32_t out[16], uint32_t const in[16])
{
int i;
uint32_t x[16];

pentru (i = 0; i < 16; ++i)    
    x[i] = în[i];
// 10 bucle à 2 runde/bucla = 20 de runde
pentru (i = 0; i < ROUNDE; i += 2) {
    // Runda impară
    QR(x[0], x[4], x[8], x[12]); // coloana 0
    QR(x[1], x[5], x[9], x[13]); // coloana 1
    QR(x[2], x[6], x[10], x[14]); // coloana 2
    QR(x[3], x[7], x[11], x[15]); // coloana 3
    // Chiar rotund
    QR(x[0], x[5], x[10], x[15]); // diagonala 1 (diagonala principală)
    QR(x[1], x[6], x[11], x[12]); // diagonala 2
    QR(x[2], x[7], x[8], x[13]); // diagonala 3
    QR(x[3], x[4], x[9], x[14]); // diagonala 4
}
pentru (i = 0; i < 16; ++i)
    afară[i] = x[i] + în[i];
}
}

void main(){
    const char* constant = "expand 32-byte k";
    uint32_t inwhole[16];
    inwhole[0] = ((uint32_t*)constant)[0];
    inwhole[1] = ((uint32_t*)constant)[1];
    inwhole[2] = ((uint32_t*)constant)[2];
    inwhole[3] = ((uint32_t*)constant)[3];

    în întregime[4] = 0;//key[0];
    inwhole[5] = 0;//key[1];
    inwhole[6] = 0;//key[2];
    inwhole[7] = 0;//key[3];
    inwhole[8] = 0;//key[4];
    inwhole[9] = 0;//key[5];
    în întregime[10] = 0;//key[6];
    inwhole[11] = 0;//key[7];

    //Număr zero și nonce
    în întregime[12] = 0;
    în întregime[13] = 0;
    în întregime[14] = 0;
    în întregime[15] = 0;

    uint32_t out[16];
    chacha_block(out, inwhole);
    printHex((char*)out2,16*4);
    //Aceasta se tipărește:
 //76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da41597c5157488d7724e03fb8d84a376a43687616151876161518616151864
}

Nu am putut găsi niciun vector de testare pentru a valida acest prim bloc al fluxului de chei. De asemenea, mi s-a părut confuz că este următorul bloc keystream menit să fie generat prin trecerea ieșirii anterioare înapoi la chacha_block funcţie? De asemenea, această cifră trebuie utilizată pentru a xor blocurile keystream cu date (acest lucru nu a fost menționat în mod explicit în articol)?

Puncte:2
drapel vu

Cifrul ChaCha20 a fost specificat de un RFC „informațional” - RFC-8439 ca referință pentru utilizare în specificațiile protocolului Internet. Documentul conține câțiva vectori de testare.

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.