Поскольку в Интернете нет инструкции «Как сделать» для ручной проверки пакета FreeBSD, вот что я понял.
Хитрость в том, что октетная строка в openssl rsautl
выводе на самом деле является хешем строки, которая является хешем SHA256 файла.
Например, скачайте current http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz
, распакуйте его и сделайте следующее:
Метод 1 (использование одной строки openssl dgst
)
Здесь важно сделать, tr -d '\n'
чтобы удалить новую строку из стандартного ввода, чтобы она не включалась в строку ввода для openssl dgst
.
sha256 -q digests | tr -d '\n' | openssl dgst -verify digests.pub -signature digests.sig
Эта команда должна вывести Verified OK
.
Метод 2 (визуальное сравнение строки октета из файла .sig с хэшем, созданным вручную)
Используйте утилиту OpenSSL для выгрузки содержимого из digests.sig
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
0:d=0 hl=2 l= 49 cons: SEQUENCE
2:d=1 hl=2 l= 13 cons: SEQUENCE
4:d=2 hl=2 l= 9 prim: OBJECT :sha256
15:d=2 hl=2 l= 0 prim: NULL
17:d=1 hl=2 l= 32 prim: OCTET STRING
0000 - ac c6 ac be cd 5e 61 63-62 82 62 4b ba 77 37 6e .....^acb.bK.w7n
0010 - 0b fa ea ef 6e 10 21 01-62 64 06 2f d0 f1 60 22 ....n.!.bd./..`"
Здесь вы можете видеть, что внедренный объект - это хеш SHA256, и его значение равно acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
.
Теперь рассчитайте SHA256 файла digests
:
sha256 -q digests
8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
- И, наконец, вычислите SHA256 этой строки с помощью
echo
команды и сравните со значением, возвращаемым openssl rsautl
:
echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
Обратите внимание, что значение из шага 3. совпадает со значением из шага 1., поэтому файл digests
действителен.
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
, похоже, тоже не подходит.