Pull to refresh

использование очень длинных ассиметричных ключей в ssh

Reading time 2 min
Views 1.6K
Привет, $username. Если вы примерно такой же криптоманьяк, что и я, то наверняка не ограничитесь регенерацией /etc/ssh/moduli, и вам захочется большего. Например, использовать для авторизации dsa-ключи длиннее 1024iB. Но проблема в том, что ssh-keygen из пакета OpenSSH, которым вооружено большинство UNIX'оидов, не хочет генерировать такие ключи. Причина такого поведения непонятна, man'ы отыслают на документ FIPS 186-2, в котором ничего толком не сказано, и ссылок на толковые объяснение сего ограничения нет. Поэтому, причин не попробовать понаступать на всякие криптограбли с длинными dsa-ключами нет. Осталось только сгенерировать такой ключ. Сделать это просто, но если не хочется тратить время на всякие ковырялки, то с методом можно ознакомиться под hubracut'ом



В этом деле поможет openssl. Сначала генерируем параметры для dsa-ключей.

openssl dsaparam -out parameters.pem 4096

Если, кто-то не знает, то 4096 — это желаемая длина ключей (в битах), которые будут генерироваться при помощи этих параметров, а сами параметры будут записаны (естественно) в файл parameters.pem, который представляет из себя закодированную при помощи base64 двоичную структуру, и снабжённый некой шапкой и антишапкой — всё в соответствии со стандартом PEM (Privacy-enhanced Electronic Mail). Сами же параметры DSA представляют собой три числа. Подробности есть в en.wikipedia.org/wiki/DSA

После того, как сгенерированы параметры, можно генерировать ключ (если, конечно, дождётесь окончания генерации параметров :) а вообще, если вдруг решите это запускать на сотовом телефоне, то запаситесь книгой 'Идеальный Код' — отличный сбоник отличных эссе):

openssl dsa -out key.pem parameters.pem

Этот ключ представляет собой, на деле, два ключа — открытый и закрытый. Если не верите, можете сами посмотреть:

openssl dsa -noout -text < key.pem

Теоретически, вы должны увидеть свои DSA-параметры и два небольших числа pub и priv, которые, на самом деле, и будут ключами.

Теперь нужно сделать три дела: (1) объявить созданный ключ вашей(им) identity, (2) вытащить из него в воспринимаемом openssh формате открытый ключ, (3) засунуть этот открытый ключ на целевую машину в authorized_keys. (2) и (3) будут смешаны в одной pipeline.

mv key.pem /home/username/.ssh/identity
chown 600 /home/username/.ssh/identity


поменять права доступа нужно обязательно, ведь, openssh — штука разборчивая, ведь, сам TrueЪ Тео де Раадт проектом руководил;

ssh-keygen -y -f /home/username/.ssh/identity | ssh username@somehost.ssh tee -a .ssh/authorized_keys

Готово. Можно теперь оставить для ssh аутентификацию только по ассиметричным ключам, и идти спокойно играть в шахматы не опасаясь весеннего обострения у латвио-индо-китае-русских хакеров.

P.S. Конечно, пользователи PuTTY могут спокойно генерировать длинные DSA-ключи puttygen'ом, но проблема в том, что puttygen для каждого нового DSA-ключа генерирует новые параметры, что напрочь убивает всё приемущество DSA над RSA, которое как раз и состоит (если не брать в расчёт возможность считать на эллиптических кривых) в скорости генерации новых ключей.

Tags:
Hubs:
+8
Comments 17
Comments Comments 17

Articles