I'm building a fuse client for ssh/sftp. I write the required ssh and sftp functions myself. Now I read in RFC4253 that before signing the data to sign is default hashed. In RFC4253 8. "Diffie-Hellman Key Exchange" SHA1 is mentioned as the default for ssh-dss. What is it for ssh-rsa?
It is using always SHA-1, unless it does not. There are two new drafts to use SHA-2 functions family:
- https://datatracker.ietf.org/doc/html/draft-rsa-dsa-sha2-256-03 (in 2018 published as RFC 8332)
The usage is negotiated using the protocol extension:
- https://datatracker.ietf.org/doc/html/draft-ssh-ext-info-05 (in 2018 published as RFC 8308)
So basically, the other answers are correct for now and the past, but for now and close future, we don't want to use SHA-1 for cryptographic signatures and possibly deprecate SHA-1 in this area. So if you will use any decently recent version of SSH, it will use SHA-2.
$\begingroup$ FWIW these were published as RFC 8332 and 8308 in 2018-03 -- although OpenSSH had implemented them since 7.2 in 2016-08. $\endgroup$ Nov 22, 2019 at 6:10
$\begingroup$ @dave_thompson_085 yes, you are right. Thank you for reminder. I will update the answer. $\endgroup$– JakujeNov 22, 2019 at 8:39
In section 6 of RFC 4253 it says on page 15:
The "ssh-rsa" key format has the following specific encoding:
string "ssh-rsa" mpint e mpint n
Here the 'e' and 'n' parameters form the signature key blob.
Signing and verifying using this key format is performed according to the RSASSA-PKCS1-v1_5 scheme in [RFC3447] using the SHA-1 hash.
So the answer is "SHA-1" as well.
I've found already:
Why does Openssh use only SHA1 for signing and verifying of digital signatures?
So by openssh always sha1 is used.