Which symmetric key algorithm does SSL use? - ssl

I understand that through SSL, the browser gets the public key of the secured website and through public key encryption rsa algorithm, these 2 establish session key and then continue communication thru some symmetric algorithm, because symmetric key encryption/decryption is faster. Which symmetric key algorithm does SSL use? DES? AES? or something else?

When the client connects to the server, it negotiates a so-called ciphersuite (combination of encryption, key exchange, authentication algorithms) to use. Each SSL client or server has a list of allowed ciphersuites and during handshake the client and the server negotiate on what ciphersuite to use. It can happen sometimes, that there's no common denominator (ciphersuites sets don't intersect) and connection can't be established.
Symmetric algorithms supported in SSL are DES, 3DES, ARCFOUR, AES, Camellia, RC2, IDEA, SEED, NULL (no encryption).

During the connection establishment (the "handshake"), the client and server decide upon a "cipher suite" to use. The cipher suite states the algorithms which are used (asymmetric key agreement, symmetric encryption, and integrity check). In details, the client sends a list of the cipher suites it supports, and the server selects one of them, that it also supports. Normally, the server selects the first suite that it supports among those sent by the client (in other words, the ordering of the suites in the client message is its "order of preference" and the server usually honors the client preferences).
For instance, the cipher suite TLS_RSA_WITH_3DES_EDE_CBC_SHA means that the session key will be transmitted with RSA (asymmetric encryption, using the RSA public key from the server certificate), the data will be symmetrically encrypted with 3DES, and the integrity check will use the SHA-1 hash function. See the TLS specification for the list of standard cipher suites (other suites were added later on, in particular some with AES).

Several possibilities including RC4 and DES or even no encryption. Not an area I know well, but I assume client and server negotiate to find one they can both use
http://httpd.apache.org/docs/2.0/ssl/ssl_intro.html#ssl

If you are using HTTPS under Firefox, if you click the little "lock" icon in the URL bar, it will give you a pop up with the details of your connection. For example, with my server, I connect with 128 bit AES with firefox.
Different web browsers can give different results of course, since the TLS connection negotiates the connection.

Related

When doing TLS communication, does DHE use both asymmetric and symmetric keys for single use?

I know that EPHEMERAL mode in ECDHE generates a new key for every connection.
I developed an https-based Rest server.
The cypher suite is TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384.
RSA generates asymmetric keys and AES generates symmetric keys.
Does EPHEMERAL mode use both RSA and AES keys for disposable use?
I'm a beginner studying TLS. I'm very curious. thank you.
I searched for the meaning of DHE in the ECDHE-RSA-AES128-GCM-SHA256 cypher suite.

misunderstanding of TLS functionality on Mosquitto's broker

i configured TLS on the mosquitto's broker as described , if i understand the real functionality of TLS :
it use both asymmetric and symmetric crypto ,asymmetric crypto for changing the key between broker/server and client and symmetric crypto to encrypt the communication between them , here i don't see where is symmetric crypto and if a type mosquitto_sub -v -u "user" -P "password" -t "path/to/topic " --cafile "path/to/ca.crt " how can i know that the communication is encrypted
I'm so confused can someone explain ???
I think you are misunderstanding how Transport Layer Security (TLS) functions. In TLS the asymmetric (public/private) encryption is used to allow two systems to agree on a form of encryption to use for communication. See the answer to this question (Which symmetric key algorithm does SSL use?) or if you are a more visual person take a look at the diagram on page 11 of this white paper (https://www.sans.org/reading-room/whitepapers/protocols/ssl-tls-beginners-guide-1029).
In your specific example, what is happening (as I understand it) is that that the Client requests an SSL connection to the Broker. The Broker and Client then use public key encryption to allow the two systems to securely agree on a form of encryption and a shared key.

How to add our created session encryption algorithm to (major) browser using OpenSSL

I am new to OpenSSL and have theoretical information in SSL protocol . I have task to create a certificate who uses RSA algorithm for symmetric session key exchange and use my own my encryption algorithm called FooSymmetricAlgorithm for symmetric session key. I need a way to tell the browser and web server to use FooSymmetricAlgorithm as symmetric algorithm. I know I can import my root certificate to browser but I think that does not mean I can add my encryption algorithm to browser. My problem is that how I can tell the browser to use FooSymmetricAlgorithm for session key and encryption. It does not difference between browser. It is suffice to have an browser and I will use it just for test purpose.
I want to know that is there any way when I send digital certificate to browser, the browser forced to use my FooSymmetricAlgorithm for encrypting data? I mean is there any way to add my algorithm to browser?
My problem is that how I can tell the browser to use FooSymmetricAlgorithm for session key and encryption.
You have to add your own cipher suite to the browser, which means changes to the source code in NSS (Chrome, Firefox). Then you have to make changes to the TLS stack used by the server and add the cipher suite there. For details how to do this see the implementation of the existing cipher suites in OpenSSL and/or NSS. Since the cipher suite is not IANA assigned you have to use one of the cipher-ids marked for private use.
If everything is done correctly the browser will announce support for the new cipher suite and the server will use it. But all this process is not as simple as adding a root certificate, that means it involves lots of coding, reading existing source code etc.

how to find Master-key and Session-ID on windows for decryption of SSl/TLS traffic using wireshark?

I have a C++ application that has a SSL/TLS communication with its own server and i don't have any access to that server. I'm trying to find out what is it sending from my PC to the server.
I tried burp and fiddler as man-in-middle but it didn't work. The application does not support Proxy so i tried routing the traffic using proxifier to burp and fiddler but it didn't work.
So I came up with these articles https://isc.sans.edu/forums/diary/Psst+Your+Browser+Knows+All+Your+Secrets+/16415 and http://ask.wireshark.org/questions/4229/follow-ssl-stream-using-master-key-and-session-id
I just need to know , How I can find Master-key and Session-ID to decrypt SSL/TLS trafic.
It depends on the TLS cipher suite being used. If the ciphersuite uses forward secrecy (DHE) you cannot decrypt the stream. If it uses RSA encryption then you need at least the private key of the server. If it also uses client authentication then you would also need the private key of the client. if it uses symmetric encryption you need the symmetric (master) key from either one of them.
But if you do have a C++ application, I would simply add logging to that application (at the lowest level).
You can use following alrternates on a x86 windows
STRACE - http://blogs.msdn.com/b/emmanubo/archive/2007/06/04/introduction-to-strace-httpreplay-support-tools.aspx
SOCKTRC if this app is on windows checkout
http://blogs.msdn.com/b/emmanubo/archive/2007/08/03/socktrc-tool.aspx
HTTPREPLAY -
generally used for browsers but here can be used to view the responses in the UI

How do you decrypt SSH .pcap file that uses Diffie Hellman encryption. With public and private keys

How do you decrypt SSH .pcap file that uses Diffie Hellman encryption. With public and private keys.
We are trying through Wireshark with no luck.
One of the benefits of ephemeral Diffie-Hellman (the DHE ciphersuites of TLS) is that it provides perfect forward secrecy. This means that even if the private DSA key used to authenticate the server (and possibly client) are obtained by an attacker someday, she won't be able to go back and decrypt any sessions captured in the past.
In other words, you can't decrypt these captures unless you recorded the secret session key; there's no way to recover it afterward.
This is different than the RSA cipher suites, where knowledge of the server private key allows one to decrypt the session.
Because the session is encrypted by a transient "session key", having the public/private keys of the server and/or client at the end is of no use to you. Those keys are only used to verify that there has been no man-in-the-middle attack.
In order to decrypt a SSH session, you must either somehow obtain the session key (perhaps by attaching a debugger to a client on either side) or perform a man-in-the-middle attack - this requires the private key of the server (and the client, if key authentication is being used). Some more info on the latter option can be found here: http://taosecurity.blogspot.com/2007/08/loving-ssh.html
So if I understand well, the process to decrypt a SSH session is very similar to decoding wifi WPA2-PSK, you need to capture the 4-way handshake to be able to derive the transient key aka PTK. In wifi WPA2-PSK if we don't have the 4-way handshake, there is also no way to recover the transient key and decrypt the traffic even if you know the actual passphrase.