Puncte:1

Cum sunt definite funcțiile interne pentru FF3?

drapel br

Am văzut că FF1/FF3 s-a spus că păstrează același format ca cel al textului simplu. De exemplu, dacă criptez un număr zecimal 1234, atunci valoarea sa criptată este, de asemenea, un număr zecimal de 4 cifre. Ambii folosesc rețeaua Feistel. Cum sunt proiectate intern funcțiile rotunde în fiecare rundă a structurii pentru a păstra formatul datelor? Am vrut să aflu cum proiectarea funcțiilor interne ajută la păstrarea formatului.

fgrieu avatar
drapel ng
Ce zici de citirea secțiunilor 4.1 și 4.5 din [specificația FF3-1](https://doi.org/10.6028/NIST.SP.800-38Gr1-draft)?
Puncte:2
drapel in

Din 4.1 Reprezentarea șirurilor de caractere ale specificațiile preliminare NIST SP 800 38G Rev 1 asta a fost menționat în comentarii:

Intrările și ieșirile de date către funcțiile de criptare 286 și de decriptare FF1 și FF3-1 trebuie să fie secvențe finite de numere, adică șiruri de cifre. Dacă datele de criptat sunt formatate într-un alfabet care nu este deja setul de numere de bază, atunci fiecare caracter trebuie să fie reprezentat printr-un număr distinct pentru a aplica FF1 sau FF3-1.

...

Alegerea și implementarea unei corespondențe unu-la-unu între un alfabet dat și setul de numere de bază de bază care reprezintă alfabetul este în afara domeniului de aplicare al acestei publicații.

Acest lucru nu este încă atât de clar, dar, practic, trebuie să mapați canonic datele de intrare la un interval [0, N) și înapoi din nou în timpul ambelor criptări. și decriptare. Această mapare este în afara domeniului de aplicare, deoarece este desigur specifică specificației de intrare a datelor.


Dacă datele tale constau din mai multe intervale, atunci lucrurile devin puțin mai complicate. În principiu, comandați mai întâi datele (de obicei de la stânga la dreapta), apoi determinați baza pentru fiecare set separat de intervale de intrare. Apoi valoarea din interval este creată prin înmulțirea intervalului de intrare cu bazele de capăt inferioare.

Îți voi arăta mai întâi cum acestea $\text{encode}$ și $\text{decodificare}$ funcțiile ar funcționa:

Să presupunem că intervalele de intrare sunt pentru o cifră - excluzând zero - urmată de un caracter în ABC majuscule, adică. [1-9][A-Z]. Baza cifrelor - excluzând zero - este $9$, baza alfabetului este desigur $26$.

Acum să încercăm să calculăm valoarea pentru 7Z. Dacă urmați aceste reguli, atunci valoarea pe care o obțineți este $6 \cdot 26 + 25 = 181$, Unde $6$ este indicele de 7 în $[1, 9]$, $26$ este baza (numărul de caractere) din ABC și $25$ este indicele de Z în acel ABC.

Pentru a-l mapa înapoi, mai întâi executați 181 $ \bmod 26 $, care ar trebui să vă ofere $25$ din nou, care îți dă Z după de-indexare. Apoi împărțiți: $\big\lceil 181 / 26 \big\rceil$, și întoarce-te $6$ care este indicele de 7 în intervalul $[1, 9]$.

Acum trebuie să includem criptarea și decriptarea:

Acum puteți efectua FF1 sau FF3 pe rezultat, $181$ și obține o valoare diferită. Puteți utiliza pur și simplu regulile pentru a codifica acest lucru în reprezentarea dorită.

Deci spune că ai $\text{encode}(\text{"7Z"}) = 181$ și $\text{enc}_k(181) = 26$, atunci aceasta vă va oferi $\text{decode}(26) = "1A"$ pe care le puteți stoca. Apoi inversezi astfel: $\text{decode}(\text{dec}_k(\text{encode}(\text{"1A"}))) = "7Z"$. Parametrii de codificare și decodare sunt specifici [1-9][A-Z].

Trucurile de mai sus pot fi extinse cu ușurință la orice format pentru care intervalele sunt clare și, atunci când sunt codificate corect, pentru codificare sunt necesare doar înmulțirea și adăugarea și numai împărțirea cu restul este necesară pentru decodare.Codificarea/decodificarea ar trebui să dureze mai puțin de o microsecundă atunci când este implementată corect (pentru dimensiuni de intrare relativ mici, pentru care FPE este utilizat în mod obișnuit).

fgrieu avatar
drapel ng
„mai puțin de o microsecundă” pentru codificarea înainte și după criptarea în sine este corectă pentru FF3-1 (și chiar amplu dacă aceasta este pe cifră), deoarece spațiul bloc al lui FF3-1 este limitat la 192 de biți. Pentru FF1 limita pare a fi 4Tib (512MiB), iar pentru bloc mare timpul pe cifră va deveni mult mai mare, deoarece crește odată cu numărul de cifre și proporțional atunci când se folosesc algoritmii din specificație și răspuns.

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.