Puncte:2

Cum se calculează/generează cutia S inversă a cifrului bloc Kuznyechik?

drapel pf

Să presupunem că vreau să modific Cifrul bloc Kuznyechik prin alegerea unui S-box aleatoriu (luat din /dev/random de exemplu).

Cum pot calcula/genera cutia S inversă?

Știe cineva formula sau algoritmul folosit pentru a face acest lucru?

Puncte:2
drapel cn

Presupunând că S-box-urile sunt o permutare.

Iată un exemplu în Python:

S = (2, 0, 1)
inversă = [0] * len(S)

pentru i în interval(len(S)):
    invers[S[i]] = i

imprimare (invers)

Iată un exemplu în C:

unsigned int S[256] = {...};
unsigned int invers[256];

pentru (int i = 0; i < 256; i++)
{
    invers[S[i]] = i;
}
phantomcraft avatar
drapel pf
Destul de simplu, nu mi-am dat seama că va fi atât de ușor. Mulțumiri!
Puncte:2
drapel in

Sagemath Pachetul SBox este un prieten al studenților/designerilor SBox.

Pentru un SBox inversabil;

# 0 1 2 3 4 5 6 7 #index
S = SBox([0, 1, 3, 6, 7, 4, 5, 2]) #output
Sinv = S.invers()
print(Sinv)

iesiri

(0, 1, 7, 2, 5, 6, 3, 4)

De fapt, implementarea inversului nu este grea; doar inversați relația index-ieșire. Amintiți-vă, SBox inversabil este doar o permutare.


Rețineți că codul sursă al SageMath SBox este Aici și, ca o bibliotecă bună, controlează mai întâi SBox-ul este o permutare sau nu și returnează un obiect SBox;

        dacă nu self.is_permutation():
            raise TypeError ("S-Box trebuie să fie o permutare")

        cdef Py_size_t i
        lista cdef L = [self._S_list[i] pentru i în interval (1 << self.m)]

        returnează SBox([L.index(i) pentru i în interval(1 << self.m)],
                    big_endian=self._big_endian)
phantomcraft avatar
drapel pf
Multumesc pentru raspuns. Știți vreun pachet/program similar în C/C++ care face același lucru cu pachetul Sagemath SBox?
kelalaka avatar
drapel in
@phantomcraft Nu știu, totuși, îl puteți folosi în [Python](https://stackoverflow.com/q/61408795/1820553)
phantomcraft avatar
drapel pf
Am primit, mulțumesc.
phantomcraft avatar
drapel pf
Ne pare rău, am selectat cealaltă întrebare ca fiind „utilă” pentru că eram interesat de o implementare C.
kelalaka avatar
drapel in
@phantomcraft atunci întrebi pe site-ul [deci] greșit.Acesta nu este un site de programare și ați întrebat „Știe cineva formula sau algoritmul folosit pentru a face acest lucru?” așa că v-am oferit cel mai simplu mod, iar algoritmul simplu „inversa relația index-ieșire”. Fără răspunsul meu, această întrebare este mai mult off-topic. A se distra.
kelalaka avatar
drapel in
După cum puteți vedea din codul sursă SageMath, găsirea directă a inversului nu este calea corectă. Nu aveți încredere orbește că SBox-ul care este descărcat de pe internet este inversabil...

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.