Thank you for your response. The problem is solved, and I can now
decode the whole TLS stream, thanks.


FYI, what I found out if you are interested:

I have dug the source code to find out what is happening in the mean
time, and found that the signed data is MD5++SHA1, but I have been
calculating the wrong hashes. (No algorithm identifier though)

I couldn't make the link between digitally-signed and signature
entities, if they are the same they should have the same name, or it
could be mentioned somewhere in the text, that could be easily
searchable, I say.

And yeah, this is just test data, I was using the 512 bit keys to make
the stream somewhat shorter.

TLS1.1 surely specifies that the signed data is MD5++SHA1, but this is
nowhere to be found in the TLS1.2 specification.



2009/7/17 Dave Thompson <dave.thomp...@princetonpayments.com>:
>>       From: owner-openssl-us...@openssl.org On Behalf Of Akos Vandra
>>       Sent: Tuesday, 14 July, 2009 13:34
>
>>       I am trying to decode the CertificateVerify structure, but have thus
> far failed.
>>       I have access to both client and server keys, and have sniffed their
> communication,
>> what I came up with (along the stream) is this CertificateVerify packet
> <snip>
>>       As far as I know, this means <snip>
>>       TLSPlainText.Handshake.CertificateVerify
>>             Length = 0x00, 0x40,   <-- The RFC doesn't say that there
> should be
>> a length info here, but this certainly is the remaining part's length.
>>             Data = 0xe4, 0xe9, <snip>
>
> Yes it does say so. 4346 7.4.3 says Signature is (assuming RSA)
>  digitally-signed struct { opaque md5_hash[16]; opaque sha_hash[20]; }
> and 4.7 says digitally-signed "is encoded as an opaque vector <0..2^16-1>
> where the length is specified by the signing algorithm and key."
> 4.3 says vector has a prefix length, which for that range is 2 octets.
> The size of an RSA signature is the same as the modulus, which
> for your case obviously is 64 bytes = 512 bits. (You do know RSA-512
> has been factorable = insecure for years now, right? Of course
> if this is only test/debug data its security doesn't matter.)
>
>>       I tried decoding this signed data with openssl (successfully), it
> yielded:
>
>>       $openssl rsautl -verify -inkey clientkey.pem -in sign.bin -hexdump
>
>>       0000 - 47 f6 a5 1b a9 cb 4a a6-90 63 2c 65 ec 6f 6d 20
>>       0010 - 10 af a8 f0 f0 80 0d 99-a3 22 cf 2b 07 b0 a4 c8
>>       0020 - c7 ec 1d 33
>
>>       My question is how to interpret this data? From the rfc I understood
> that
>> there should be a
>
>>             struct {
>>                SignatureAndHashAlgorithm algorithm;
>>
>>                opaque signature<0..2^16-1>;
>>             } DigitallySigned;
>
> Not in TLS1.0 or 1.1 for sure. It should be two (fixed-length) hashes
> as above, and it is (36 bytes = 16 + 20). I don't know if 1.2 changed.
>
>>       I am not sure what is the hash that should be calculated, so I am
> not
>> sending that along, because I don't think it is correct.
>
> Per 7.4.8, the hash(es) should be of all the handshake messages so far.
> This is the same idea as used (later) for Finished.
>
>
>
> ______________________________________________________________________
> OpenSSL Project                                 http://www.openssl.org
> User Support Mailing List                    openssl-us...@openssl.org
> Automated List Manager                           majord...@openssl.org
>
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to