Puncte:1

Despre corectitudinea exemplului de umplutură al RFC 5246

drapel in

Umplutura PKCS#7 este definită în rfc5652#section-6.3

Unii algoritmi de criptare a conținutului presupun că lungimea intrării este a multiplu de k octeți, unde k este mai mare decât unu. Pentru așa algoritmi, intrarea va fi completată la capătul final cu k-(lth mod k) octeți toți având valoarea k-(lth mod k), unde lth este lungimea intrării. Cu alte cuvinte, intrarea este completată la finalul final cu unul dintre următoarele șiruri de caractere:

               01 -- dacă al-lea mod k = k-1
            02 02 -- dacă lth mod k = k-2
                 .
                 .
                 .
       k k ... k k -- dacă al-lea mod k = 0

După cum putem vedea, octeții de umplutură pot conține o serie de01,02,...,sau,16 pentru un cifru bloc de 16 octeți. În timp ce citesc

Am văzut că au dat un exemplu ca;

Al doilea bloc conține cei 9 octeți HMAC rămași și 7 octeți de umplutură 0x06, vezi Figura 1. Rețineți că criptatorul poate alege, de asemenea, padding mai lung și adăuga 23, 39, ... sau 247 de octeți de umplutură (în timp ce setează valoarea octeților de umplutură în consecință).

Aceasta nu este umplutură PKCS#7. Deci, m-am uitat la TLS 1.2 RFC 5246 și vezi aproape același model;

Dacă lungimea căptușelii ar fi minimul necesar, 6, căptușeala ar fi 6 octeți, fiecare conținând valoarea 6. Astfel, ultimii 8 octeți ai GenericBlockCipher înainte de criptarea blocului ar fi xx 06 06 06 06 06 06 06, unde xx este ultimul octet al MAC.

Pentru a fi compatibil cu umplutura PKCS#7, cele de mai sus ar trebui să fie ( nu a putut vedea un erată)

Dacă lungimea căptușelii ar fi minimă necesară, 7, căptușeala ar fi 7 octeți, fiecare conținând valoarea 7. Astfel, ultimii 8 octeți ai GenericBlockCipher înainte de criptarea blocului ar fi xx 07 07 07 07 07 07 07, unde xx este ultimul octet al MAC.

și articolul are și acolo o greșeală.

Din câte știu, aceste două resurse sunt incorecte. Există ceva ce mi-a omis despre diferitele modele/utilizări ale regulilor de umplutură PKCS#7?

kelalaka avatar
drapel in
Rețineți că nu iau în considerare umplutura SSLv3 unde ultimul octet indică numărul de octeți de umplutură, iar restul umpluturii poate lua orice valoare.
dave_thompson_085 avatar
drapel cn
Crossdupe https://security.stackexchange.com/questions/161153/rfc-5246-tls-1-2-padding-example-mistake și https://security.stackexchange.com/questions/88839/pkcs7-vs-tls -1-2-căptușeală
Puncte:3
drapel cn

Umplutura utilizată pentru suitele de criptare CBC în SSLv3 prin TLS 1.2 nu este PKCS#5/PKCS#7. Este padding-ul folosit în SSL/TLS, pe care nu l-am văzut altundeva.

Căptușeala înăuntru TLS 1.0, TLS 1.1 și TLS 1.2 poate fi de la 1 la 256 de octeți, deci poate umple mai multe blocuri. În protocolul predecesor SSL 3.0, trebuie să completeze exact un bloc.În toate versiunile, ultimul octet trebuie să fie lungimea padding-ului, excluzând ultimul octet. Octeții precedenți pot lua orice valoare în SSL 3.0 și trebuie să fie lungimea de umplutură în TLS 1.0 până la 1.2. Pentru un cifru bloc cu $B$-blocuri de octeți:

Specificație Lungime totală Blocuri Conţinut
PKCS#7 $n \în [1, B]$ octeți $1$ $(n, \ldots, n)$
SSL 3.0 $n \în [1, B]$ octeți $1$ $(?, \ldots, ?, (n-1))$
TLS 1.0–1.2 $n \în [1, 256]$ octeți $1$ la $\lceil 256/B \rceil$ $((n-1), \ldots, (n-1))$

După cum puteți vedea, PKCS#7 umple umplutura cu lungimea totală a umpluturii, în timp ce TLS 1.0–1.2 umple umplutura cu lungimea totală a umpluturii minus unu. Motivul acestei alegeri aparent ciudate este că este o adaptare a padding-ului SSL 3.0, în care ultimul octet este un octet de lungime care nu este inclus în ceea ce specificația SSL numește âpaddingâ și â paddingâ propriu-zis poate avea un conținut arbitrar.

Exemplele pe care le citați din RFC 5246 și din Merget și colab. sunt corecte. Dacă adăugarea a 7 octeți aduce textul simplu la un multiplu al mărimii blocului, atunci 06 06 06 06 06 06 06 este o posibilă umplutură TLS (așa cum sunt 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16, etc.).

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.