[ 
https://issues.apache.org/jira/browse/SSHD-506?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17109606#comment-17109606
 ] 

Matt Sicker commented on SSHD-506:
----------------------------------

I decided to cheat a little and go read the source code in OpenSSH. I think 
it's given me a couple ideas on refactoring what I've written to better match 
how they implement this. It seems like any implementation of SSH follows a 
fairly similar architecture that mirrors the SSH standard, and that has made it 
increasingly easy for me to jump around all these different implementations. 
Due to a limitation in the Java crypto API, I'll have to keep track of the 
secret key when using GCM so I can re-init the cipher with the updated IV on 
each packet (OpenSSL apparently allows you to directly update an IV using the 
envelope cipher function for setting an IV; yay for low level operations we 
can't access). And as far as I can tell, OpenSSH seems to use the IV as 
calculated during key exchange, and then it updates the IV for each packet by 
incrementing the 8 upper bytes as an unsigned long (the lower 4 bytes remain 
fixed until a re-key).

Based on my read through so far, I think I've got this mostly figured out. I 
think I initially confused a couple things: how to update the nonce properly 
for OpenSSH compatibility, and how to treat the packet length in this mode 
(this is more of an "off by 4" error rather than "off by 1").

> Add support for aes128/256-gcm ciphers
> --------------------------------------
>
>                 Key: SSHD-506
>                 URL: https://issues.apache.org/jira/browse/SSHD-506
>             Project: MINA SSHD
>          Issue Type: Improvement
>            Reporter: Lyor Goldstein
>            Priority: Major
>
> See:
> * [rfc5647|https://tools.ietf.org/html/rfc5647]
> * 
> [draft-igoe-secsh-aes-gcm-01|https://tools.ietf.org/html/draft-igoe-secsh-aes-gcm-01]
> * [OpenSSH v6.2|http://www.openssh.com/txt/release-6.2]
> * [JAVA AES 256 GCM encrypt/decrypt 
> example|https://javainterviewpoint.com/java-aes-256-gcm-encryption-and-decryption/]
>  - especially the usage of {{GCMParameterSpec}} to initialize the cipher
> * [OpenJDK 8 AESCipher.java source 
> code|https://github.com/frohoff/jdk8u-dev-jdk/blob/master/src/share/classes/com/sun/crypto/provider/AESCipher.java]
> ** See also 
> [CipherCore.java|https://github.com/frohoff/jdk8u-dev-jdk/blob/master/src/share/classes/com/sun/crypto/provider/CipherCore.java],
>  
> [FeedbackCipher.java|https://github.com/frohoff/jdk8u-dev-jdk/blob/master/src/share/classes/com/sun/crypto/provider/FeedbackCipher.java],
>  
> [GaloisCounterMode.java|https://github.com/frohoff/jdk8u-dev-jdk/blob/master/src/share/classes/com/sun/crypto/provider/GaloisCounterMode.java]



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org
For additional commands, e-mail: dev-h...@mina.apache.org

Reply via email to