2008/8/4 abc_123_ok <[EMAIL PROTECTED]>: > Dear Ger, > > ^_^ the reason is I didn't decrypt the 24 bytes data, so the IV don't > update , as a result is the data decrypted is error.
Thanks for posting the resolution. > thanks a lot. You're welcome! Take care, Ger > > ________________________________ > abc_123_ok > 2008-08-04 > ________________________________ > 发件人: Ger Hobbelt > 发送时间: 2008-08-04 17:08:38 > 收件人: openssl-users@openssl.org > 抄送: > 主题: Re: Re: Re: hello everyone > > Great! > > I'm curious: what was the solution? > > Thanks, > > Ger > > > On Sat, Aug 2, 2008 at 10:12 AM, abc_123_ok <[EMAIL PROTECTED] > wrote: >> thanks Ger Hobbelt and All, >> >> my question have been solved, >> >> thanks a lot. >> 2008-08-02 >> ________________________________ >> abc_123_ok >> ________________________________ >> 发件人: Ger Hobbelt >> 发送时间: 2008-07-30 16:52:00 >> 收件人: openssl-users >> 抄送: >> 主题: Re: Re: Re: hello everyone >> > yes , you are correct , my client does not use Openssl code. >> Okay... Well, this significantly complicates matters as I assume you >> have either (a) written the embedded code from scratch, or (b) use a >> different third party library for that code. Where 'gut feeling' makes >> me bet on (a) here. Correct? >> Anyway. The SSL protocol is standardized, so the problem is not there, >> but your issues are /very/ likely due to subtle bugs and/or lacking >> features in implementing the protocol in the embedded code. >> Maybe an 'open door' but note that SSL is not only 'encrypting' your >> raw data, but also includes protocol messages to signal the other side >> (re-)authentication or other SSL-defined activity is required. One of >> those messages is #23 (decimal) which is 'application_data' (see >> RFC4346 and other relevant spec documents). >> Message #23 does not just contain the 'encrypted application data' as >> is, but includes extra stuff, depending on cipher suite and protocol >> version. CBC ciphers require an IV to start, so the first few bytes >> VERY PROBABLY are the IV being sent to the other side (since you use >> CBC). Within the same message #23 (see RFC4346 for TLS1: appendix >> A.1), you will find trailing data constituting the MAC and padding, >> which will easily account for 24 bytes. (SHA-1 MAC at 160bits = 20 >> bytes already; padding may be an 'arbitrary' length.) >> Before we dive into that a little deeper, have a look at the network >> data passed between an *OpenSSL* client and *OpenSSL* server, like the >> s_client/s_server example you showed a little before here: notice >> there that the 'user' gets to see the plaintext data *exactly* as >> typed on the other side, but when you look at the raw TCP packets sent >> up and down, the TCP 'data' (so anything beyond the TCP header in the >> network packet) will contain some /extra/ (mostly encrypted) data as >> well: that's the SSL protocol layer at work. (I refer to s_client + >> s_server here, because you can quickly see those two 'work together >> fine'. This is very complex stuff so we try to go down one level at a >> time.) Your network sniffer apparently is able to decode the protocol >> sufficiently to show you the individual SSL protocol messages as I see >> SSL protocol message (23) explicitly mentioned there. >> However, NEVER think 'application data' == "my encrypted data and that's >> all"! >> Like I said, there's the IV, MAC and padding in there. And if you >> really want/need to travel all seven levels of Dante's Hell, you may >> wish to read the full SSL/TLS specification and then have a look at >> the actual SSL implementation of OpenSSL. Excellent work in my >> opinion, but like anything concerning cryptography, there's additional >> tweaks in there for security issues found by researchers after the >> specifications were cast in RFC rock. For a prime example of such, may >> I point you to the source code of [ssl/s3_pkt.c] and that includes >> reading the text available at the /~bodo/ URL mentioned in the >> comments there. >> Again, note that the code may be initially hard to read, but that >> wasn't done for 'fun' but because you need to watch out for a zillion >> things all at the same time. >> <off topic > >> Generally speaking, I've found that one of the things to quickly break >> not-so-well-done SSL protocol implementations is having your [OpenSSL] >> implementation send an enforced 'cipher suit change' / 'renegotiation' >> message (and 'issue' which would otherwise only be reported for 'long >> transfers' due to internal SSL renegotiate timeout being triggered). >> You can try one example of this sort of neckbreaker by running >> s_client and typing a lone 'R' on a line (that's typing [Enter], [R], >> [Enter]). Hell, that breaks most 'overly naive' application code using >> OpenSSL -- which is /not/ a problem with OpenSSL or SSL itself, but >> rather programmers who cut&paste example code and don't check up on >> specs nor test beyond the 'It Just Works Now(tm)' stage, but I digress >> here. >> </off topic > >> Returning to your encrypted 'application data' chunks: as described in >> the tls-cbc.txt (see URL in s3_pkt.c), the data not only contains your >> encrypted plaintext, but also IV, MAC, padding and possibly extra >> (zero length plaintext) data -- at least if I have interpreted the >> tls-cbc.txt, the source code and the protocol correctly. (If I made >> any mistake here, please correct me!) >> Besides, SSL is allowed to fragment / bundle your data in more or >> fewer application_data(23) messages as it deems necessary. (A process >> somewhat comparable to packet fragmentation on the IP and physical >> network layers for non-encrypted network communication protocols.) >> You may find that the code uses *_RT_APPLICATION_DATA #defines for the >> SSL protocol layer message [processing] where application data is >> pushed across the wire. >> Summarizing: >> Your message #23(decimal) 'application_data' consists of cipher-suite >> and protocol dependent 'extra data', next to the straight encrypted >> plaintext you wanted to transmit across the wire. 'extra data' here >> may be any of IV, MAC and padding, though it is not necessarily >> limited to those. See the SSL/TLS RFCs and the OpenSSL ssl/*.[ch] code >> for further investigation. >> Also note that when constructing the protocol on your own that there >> is no 'single correct answer' here: your receiver implementation MUST >> be able to cope with the subtleties here (such as the ones mentioned >> in the tls-cbc.txt text). >> Given the /large/ complexity that comes with a /proper/ implementation >> of the SSL protocol, I would personally advise you to spend your >> efforts on porting OpenSSL to your embedded environment instead of >> crafting your own -- assuming you are trying something like that now >> (the (a) bet I mentioned at the start of this message). I have ported >> OpenSSL to various non-UNIX platforms in the past and it may be more >> or less of a challenge (memory footprint issues can be a factor, as is >> the lack of a C runtime library offering file I/O APIs, etc.) but I >> have found that the problems you will be facing then are of an >> entirely different (and lacking readily available outside /expert/ >> help, far more manageable) nature. In the end this leaves you time to >> struggle with OpenSSL API issues you may run into instead. At THAT >> level, extra help is available in the form of, for example, the >> O'Reilly OpenSSL book and the wide range of experience available on >> this mailing list as well, while your current issue reads to me as a >> question only properly answerable by the few people on this earth who >> have actually built an SSL protocol implementation themselves. >> Ah, also have a look at this for the format of those SSL messages, >> including application_data(23) (found these after I wrote the above, >> may be easier to grok): >> message layout in bytes: >> http://en.wikipedia.org/wiki/Secure_Sockets_Layer >> shows a message trace just like yours with a bit of explanation: >> http://blogs.sun.com/sin/entry/ssltap_ing_ssl_and_tls >> -- >> Met vriendelijke groeten / Best regards, >> Ger Hobbelt >> -------------------------------------------------- >> web: http://www.hobbelt.com/ >> http://www.hebbut.net/ >> mail: [EMAIL PROTECTED] >> mobile: +31-6-11 120 978 >> -------------------------------------------------- >> ______________________________________________________________________ >> OpenSSL Project http://www.openssl.org >> User Support Mailing List openssl-users@openssl.org >> Automated List Manager [EMAIL PROTECTED] >> . > > > > -- > Met vriendelijke groeten / Best regards, > > Ger Hobbelt > > -------------------------------------------------- > web: http://www.hobbelt.com/ > http://www.hebbut.net/ > mail: [EMAIL PROTECTED] > mobile: +31-6-11 120 978 > -------------------------------------------------- > :棫I"袭堔r豰稛�?(ラ觳Z+並 ?│婍1ē妜 > 娝hラ觳[瑉?ラ觳Z+€ > f瓂意灿 潹 甪"穐殜)z{,枈 -- Met vriendelijke groeten / Best regards, Ger Hobbelt -------------------------------------------------- web: http://www.hobbelt.com/ http://www.hebbut.net/ mail: [EMAIL PROTECTED] mobile: +31-6-11 120 978 --------------------------------------------------