Как OpenSSH решает, какой ключ хоста использовать?
По умолчанию в моей текущей версии (6.9p1
) OpenSSH Server создаст четыре типа ключей хоста:
$ ls /etc/ssh/ssh_host_*_key.pub
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key.pub
Через тестирование я заметил, по крайней мере, с использованием той же версии клиента OpenSSH (6.9p1
) ключ ECDSA будет использоваться хостом независимо от типа ключа клиента.
Где OpenSSH решает, какой приоритет имеют поддерживаемые алгоритмы? Является ли эта информация редактируемой или жестко закодированной в исходный код текущей версии?
И что еще более важно, почему OpenSSH решил уделить первоочередное внимание алгоритму ECDSA?
2 ответа
Заказ выбирается клиентом с помощью HostKeyAlgorithms
опция конфигурации. По умолчанию в моей системе (согласно man-странице):
- ecdsa-sha2-nistp256-cert-v01@openssh.com
- ecdsa-sha2-nistp384-cert-v01@openssh.com
- ecdsa-sha2-nistp521-cert-v01@openssh.com
- ssh-ed25519-cert-v01@openssh.com
- ssh-rsa-cert-v01@openssh.com
- ssh-dss-cert-v01@openssh.com
- ssh-rsa-cert-v00@openssh.com
- ssh-dss-cert-v00@openssh.com
- ECDSA-SHA2-nistp256
- ECDSA-SHA2-nistp384
- ECDSA-SHA2-nistp521
- SSH-ed25519
- SSH-RSA
- SSH-ДСС
Чтобы переопределить это, сделайте что-то вроде:
ssh -oHostKeyAlgorithms=ssh-ed25519 user@foo.com
И что еще более важно, почему OpenSSH решил уделить первоочередное внимание алгоритму ECDSA?
ECDSA была введена в openssh с версией 5.7, вы можете найти примечания к выпуску здесь. В частности, заявлено:
Реализуйте режимы криптографии с эллиптической кривой для обмена ключами (ECDH) и ключей хост / пользователь (ECDSA), как указано в RFC5656. ECDH и ECDSA предлагают лучшую производительность, чем простые DH и DSA при той же эквивалентной длине симметричного ключа, а также намного более короткие ключи.
.......
Поддерживаются ключи сертификата и пользовательские ключи, использующие новые типы ключей ECDSA - ключ ECDSA может быть сертифицирован, а ключ ECDSA может действовать как CA для подписи сертификатов.
ECDH в 256-битном поле кривой является предпочтительным алгоритмом согласования ключей, когда его поддерживают и клиент, и сервер. Ключи хоста ECDSA предпочтительны при первом изучении ключей хоста или могут быть изучены с помощью ssh-keyscan(1).
Также RFC 5656 заявляет:
Во многих оценках считается, что 2 80–2 90 операций недопустимы, поэтому предлагается использовать эллиптические кривые длиной не менее 160–180 бит. ТРЕБУЕМЫЕ кривые в этом документе - это 256-, 384- и 521-битные кривые; реализации не должны использовать кривые размером менее 160 бит