Puncte:1

Programator de chei Rivest Cipher 6 (RC6).

drapel us

Încerc să înțeleg Key Scheduler folosit în RC6 și am un total de 3 întrebări. The Pagina Wikipedia RC6 spune că singura diferență dintre RC5 iar programatorul de chei RC6 este că mai multe cuvinte sunt produse din cheie în RC6. În aplicația mea, folosesc w=32bits, r=20rounds și b=16bytes.

Prima mea întrebare este dacă acestea sunt două bucle for separate sau a doua este bucla for care iterează de la s-1 la v în prima buclă for care iterează de la 1 la 2r+3? A doua mea întrebare este de ce setăm A=B=i=j=0 și această comandă și v=3xmax{c,2r+4} se află în prima buclă for?

Hârtia RC6 furnizează și acest pseudocod:


Intrare: cheie b byte furnizată de utilizator preîncărcată în matricea de cuvinte c L[0... c - 1]

Numărul r de runde

Ieșire: taste rotunde w-bit S[0... 2r + 3]

Procedura: S[0] = Pw

pentru i = 1 la 2r + 3 face:
S[i] = S[i - 1] + Qw
A = B = i = j = 0
v = 3 x max{c,2r+4}

pentru s = 1 la v faceți:
{
A = S[i] = (S[i] + A + B)<<<3
B = L[j] = (L[j] + A + B)<<<(A + B)
i = (i + 1)mod(2r + 4)
j = (j + 1)modc
}

A treia mea întrebare este despre cum să preîncărc matricea de cuvinte L cu cheia mea de 16 octeți. Lucrarea RC5 spune:

Primul pas algoritmic de extindere a cheii este de a copia cheia secretă K[0...b-1] într-o matrice L[0...c-1] de cuvinte c=b/u unde u=w/8 este numărul de octeți/cuvânt. Această operație se face într-o manieră naturală folosind u octeți consecutivi de cheie ai lui K pentru a completa fiecare cuvânt succesiv în L, de la un octet de ordin inferior la un octet de ordin superior. Orice poziții de octeți necompletate ale lui L sunt puse la zero.

Și pseudocodul pentru această operație este:

pentru i=b-1 până la 0 faceți:
    L[i/u] = (L[i/u]<<<8)+K[i];

Pentru a detalia a treia întrebare, dacă merg de la 15 la 0 și u = 32/8 = 4, cum pot folosi o zecimală pentru a indexa L? De exemplu, când i este 15 avem L[15/4]=(L[15/4]<<<8 + K[i]);

Puncte:2
drapel ru
  1. Buclele sunt disjunse. Cu alte cuvinte, prima buclă se încheie și apoi începe a doua buclă.

  2. A=B=i=j=0 sunt inițializate în mod explicit la zero, deoarece în multe limbi, nespecificarea unei valori inițiale poate duce la un comportament nespecificat (de exemplu, setarea variabilelor la valori aleatorii aflate în memoria veche).Această inițializare și inițializarea lui v au loc în afara buclelor.

  3. Expresia i/u ar trebui interpretată ca aritmetică a întregului C care returnează o valoare întreagă (în acest caz, luând cuvântul). Astfel, în exemplul dumneavoastră L[15/4]=L[3].

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.