Puncte:0

SSLv3 ServerKeyExchange SIgnature struct nepotrivire

drapel pl

Mă joc cu implementarea SSLv3 în Go conform rfc6101.

Pot deserializa ServerKeyExchange până la ServerKeyExchange.signed_params.

Suita de criptare este TLS_RSA_EXPORT_WITH_RC4_40_MD5 (0x0003).

Algo de semnătură a certificatului: 1.2.840.113549.1.1.5 (sha1WithRSAEncryption).

Conform RFC, structurile ar trebui să arate astfel:

        struct {
            selectați (Algoritmul KeyExchange) {
                caz diffie_hellman:
                    Parametri ServerDHParams;
                    Semnătura signed_params;
                caz rsa:
                    Parametri ServerRSAParams;
                    Semnătura signed_params;
                caz fortezza_kea:
                    Parametri ServerFortezzaParams;
            };
        } ServerKeyExchange;
        structură semnată digital {
            select(SignatureAlgorithm) {
                caz anonim: struct { };
                caz rsa:
                    opac md5_hash[16];
                    opac sha_hash[20];
                caz dsa:
                    opac sha_hash[20];
            };
        } Semnătură;

dar am primit un răspuns diferit de la server:

introduceți descrierea imaginii aici

Ce îmi lipsește?

Mulțumiri!

dave_thompson_085 avatar
drapel cn
**Nu sunt de acord cu VtC ca „programare”**; deși OP scrie cod, Q nu este despre cod, ci despre protocol independent de orice implementare și nu aparține SO. _este_ „folosirea” cripto, spre deosebire de cripto în sine, și ar putea fi mai bine pe security.SX, dar l-aș numi borderline.
Puncte:0
drapel cn

Aproximativ 10 rânduri deasupra părții pe care ai citat-o, există

        struct {
            opac rsa_modulus<1..2^16-1>;
            opac rsa_exponent<1..2^16-1>;
        } ServerRSAParams;

deci cazul=rsa (care este de fapt numai pentru rsa_export) of ServerKeyExchange este într-adevăr:

        ServerRSAParams:
            rsa_modulus -- opac (întreg cu adevărat bigendian fără semn)
            rsa_exponent -- idem
        Semnătura - idem 

dar această structurare nu afectează codificarea, care conține doar cele trei valori „frunze”, și orice decodificare la care te uiți (Wireshark?) nu se deranjează să distingă cele două niveluri aici.

Notă struct cu semnătură digitală... Semnătură nu înseamnă că cele două hash-uri (md5 și sha1) sunt conținute în mesaj; mai degrabă, acestea sunt introduse în algoritmul de generare a semnăturii aplicabil, în acest caz RSA „bloc tip 1” definit în PKCS1v1 (acum retronimizat RSASSA-PKCS1-v1_5 în PKCS1v2) și ieșire al algoritmului de semnătură, pentru RSA un singur întreg codificat ca lungime fixă ​​nesemnată bigendian (vezi „I2OSP” în orice versiune de PKCS1), este ceea ce este plasat în mesaj, cu un prefix de lungime de 2 octeți, ca și cum ar fi fost declarat opac<?..2^16-1> deși nu văd acest lucru menționat în RFC6101; TLS1.0 RFC2246 et succ o menționează în 4.7.

(Ați putea dori să vă uitați la mai multe/toate RFC2246; cu excepția PRF și derivarea cheilor, a unor coduri de alertă și a suitelor de criptare, adăugarea de extensii (din care RFC5746 Secure Renegotiation a devenit destul de obligatorie) și, desigur, numărul versiunii, pentru cele mai bune din amintirile mele TLS1.0 este la fel din punct de vedere tehnic cu SSL3, dar documentul este mai amănunțit, probabil datorită trecerii prin IETF gauntlet^Wprocess.)

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.