Я пытаюсь реализовать DHE_DSS в пакет go crypto/tls. К сожалению, я не могу заставить PreMasterSecret (Z) быть таким же, мой основной рабочий процесс:
Сообщение об обмене ключа сервера приема
- Выдержка P, G, Ys
- Проверить использование цифровой подписи
Подготовить сообщение об обмене ключами клиента
- Создать клиент Xc
- Генерация Yc (Yc = G ^ Xc% P)
- Создать Z (Z = Ys ^ Xc% P)
- Отправить обратно Yc, упакованный следующим образом:
ckx := make([]byte, len(yC)+2)
ckx[0] = byte(len(Yc)>>8)
ckx[1] = byte(len(Yc))
copy(ckx[2:], yBytes)
Однако, когда я отлаживаю это с помощью gnutls-serv, оба PreMasterSecrets (Z) отличаются. Нужно ли мне подписать возвращенный Yc, или, может быть, упаковать его по-другому? Я не вижу ничего в RFC 5246, чтобы предложить это.
< - EDIT →
Вот патч моих изменений: