Я использую SSH (если быть точным, OpenSSH 5.5p1 в Linux). У меня есть ключ, на котором у меня есть пароль. Я использую это для обычного входа в компьютерные вещи.
Могу ли я также использовать его для подписи файлов?
Насколько я понимаю, ключ SSH является ключом RSA (или DSA), и во время процесса входа в систему SSH он используется для подписи сообщений, отправляемых на сервер. Таким образом, в принципе и на практике, он может быть использован для подписания вещей - действительно, это его единственная цель.
Но, насколько я вижу, нет способа использовать ключ для подписи произвольного файла (как, скажем, с PGP). Есть ли способ сделать это?
ssh
digital-signature
Том Андерсон
источник
источник
Ответы:
Не может быть способа сделать это только с помощью инструментов OpenSSH.
Но это можно сделать довольно легко с помощью инструментов OpenSSL. На самом деле, есть как минимум два способа сделать это. В приведенных ниже примерах
~/.ssh/id_rsa
это ваш личный ключ.Одним из способов является использование dgst :
Другой использует pkeyutl :
Оба они записывают двоичную подпись в стандартный вывод. Параметр dgst принимает
-hex
печать текстового представления с некоторыми подробностями о форме подписи. pkeyutl принимает-hexdump
параметр , который немного менее полезным. Оба будут принимать ключи RSA и DSA. Я понятия не имею, каков формат вывода. Две команды создают разные форматы. У меня складывается впечатление, что pkeyutl считается более современным, чем dgst .Чтобы проверить эти подписи:
а также:
Проблема здесь в том
$PUBLIC_KEY_FILE
. OpenSSL не может прочитать формат открытого ключа OpenSSH, поэтому вы не можете просто использоватьid_rsa.pub
. У вас есть несколько вариантов, ни один из которых не идеален.Если у вас версия OpenSSH 5.6 или новее, вы можете сделать это:
Который запишет открытый ключ в стандартный вывод в формате PEM, который OpenSSL может прочитать.
Если у вас есть закрытый ключ, и это ключ RSA, то вы можете извлечь из него открытый ключ (я предполагаю, что файл закрытого ключа в кодировке PEM включает в себя копию открытого ключа, поскольку невозможно получить открытый ключ). от самого закрытого ключа), и используйте это:
Я не знаю, есть ли эквивалент DSA. Обратите внимание, что этот подход требует некоторого сотрудничества от владельца закрытого ключа, который должен будет извлечь открытый ключ и отправить его потенциальному верификатору.
Наконец, вы можете использовать программу на Python, написанную главой под названием Lars, для преобразования открытого ключа из формата OpenSSH в формат OpenSSL.
источник
@ Ответ Тома помог мне начать, но не сработал.
Эти команды будут работать с:
Использование pkeyutl
Использование dgst
Версия pkeyutl может подписывать только файлы небольшого размера. В то время как dgst может подписывать произвольно большие файлы, потому что перед подписанием результата требуется дайджест.
источник
Чтобы проверить эти подписи - более простое решение:
Более простой способ убедиться, что подписанный документ одинаков, - заново сгенерировать файл цифровой подписи и затем использовать diff, чтобы проверить, совпадают ли два файла подписи.
источник