SSH согласование: плохо SSH2_MSG_KEX_DH_GEX_REPLY или что-то еще?

Я делаю Unix Server SSH эмуляции для iOS. В процессе переговоров я встретил много препятствий и все еще борюсь с ними. Один из последних - о пакетных данных SSH2_MSG_KEX_DH_GEX_REPLY, где я получаю неправильную длину пакета (может быть постороннее заполнение). Описание пакета для всего процесса приведено ниже:

Client : connection with aix.polarhome.com with port 775 (changed port for ssh) using GCDAsyncSocket
Server : SSH-2.0-OpenSSH_6.0
Client : send SSH-2.0-OpenSSH_6.0

(Rest packet will follow BPP protocol)
Server : SSH2_MSG_KEXINIT with set of supported algorithms
Client : SSH2_MSG_KEXINIT with set of common algorithms 

Client : SSH2_MSG_KEX_DH_GEX_REQUEST_OLD 
         code: 
    SignedByte sendByte[1920];
    int writeIndex = 0;

    minGroupLength = 1024;
    prefGroupLength = 1024;
    maxGroupLength = 4096;

    sendByte[writeIndex++] = SSH2_MSG_KEX_DH_GEX_REQUEST_OLD;

    [self write32BitInteger:prefGroupLength toPacket:sendByte fromIndex:writeIndex];
    writeIndex += 4;

    [self sendSSHBinaryPacketPayload:sendByte toLength:writeIndex];
    writeIndex = 0;

Server : SSH2_MSG_KEX_DH_GEX_GROUP

client -> fetch values of p and g 
         compute value of e (1 < e < (p-1)/2)

Client : SSH2_MSG_KEX_DH_GEX_INIT
         Code
SignedByte sendByte[1920];
    int writeIndex = 0;

NSInteger eByteCount = [[e description] stringByReplacingOccurrencesOfString:@" " withString:@""].length/2;

sendByte[writeIndex++] = SSH2_MSG_KEX_DH_GEX_INIT;

[self write32BitInteger:eByteCount toPacket:sendByte fromIndex:writeIndex];
writeIndex += 4;

Byte eBytes[eByteCount];
NSInteger length = [self getBytes:eBytes fromBigInteger:e];
for (int i = 0; i < length; i++) {
    sendByte[writeIndex++] = eBytes[i];
}

[self sendSSHBinaryPacketPayload:sendByte toLength:writeIndex];
writeIndex = 0;

Server : SSH2_MSG_KEX_DH_GEX_REPLY
Total length : 720 
Packet length (4 bytes): 00 00 02 bc (700 which should be 720 - 4 = 716) Don't Know why this 700?

client -> read host key and verify it
         read value of f
         read signature and verify it

Client : SSH2_MSG_NEWKEYS

Теперь после отправки последнего пакета сервер проверяет и не получает никаких данных взамен SSH2_MSG_NEWKEYS.

Я изучил код других эмуляторов ssh, но ни один из них не помог. Я совершенно невежественен, Что мне нужно сделать, пожалуйста, помогите, я действительно так расстроен.

1 ответ

В @revinder в комментарии:

Я решил, что мой собственный сервер отправляет два пакета, объединенные в один, SSH2_MSG_KEX_DH_GEX_REPLY и SSH2_MSG_NEWKEYS.

Другие вопросы по тегам