RSA подпись.
Картинка подписана 512 битной сигнатурой:
9ABA184A CE3FE3B3 26BF415E 76AC5791
81230280 47FCA8AB 5971FFB5 F041DB8E
1A2F8C09 D2939BCD 44D89259 F92F31A2
77C2AC3D F8FD6D98 07B652A0 B3D80F58
посредсвом математический операций подписи и этим ключом шифрования:
BC0B1990 86C7F26C BC9D50F4 04944DB4
789FCBFC F7AD8DBC 2120898A BEAAF311
EEA20229 03560884 1FA41073 ABBD5D37
500C60B5 3BFB4660 5740381B 72C9DB71
Получается сверочный ключ:
0001FFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FF003020
300C0608 2A864886 F70D0205 05000410
60CD6D08 6354D6C6 7B093A57 4717FE03
Можно ли, зная сверочный ключ, ключ шифрования(см. выше) и алгоритм (получения сверочного ключа)
получить подпись(сигнатуру)?
Т.е по сути сделать обратное преобразование.
Вот ещё несколько подписей картинок и соответвенно их проверочных ключей
-----------------------------------------------
Подпись к картинке:
B8B23E33 FB7251D7 675B5396 5D8FDCD7
FF23BF88 1665B6AD BABCB81B 2BA82DAF
4605DE16 AFC78839 AB58F112 02D70728
68F32557 2A20C688 E0F97C6F 50EEB1EC
сверочный ключ:
0001FFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FF003020
300C0608 2A864886 F70D0205 05000410
02A9E49A C6ADEBA1 EA6E4713 5E311A41
-----------------------------------------------
Другая картинка, сначала подпись, потом сверочный ключ
-----------------------------------------------
1F8BB2BE 7E7884EE BCAD1436 C09AB57E
6269EC70 EB0B0040 DF745BF6 354DCC12
15B2E854 1B900FF9 7BC215E3 23BC35A2
BC051E89 DF4CDEFD BA351FB7 CA0FB25C
0001FFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FF003020
300C0608 2A864886 F70D0205 05000410
8854BB9A 1D2B350F FC1212D9 3E14172A
-----------------------------------------------
Как получается сверочный ключ я уже говорил в начале.
И понятное дело, что его вычисляет прога, а не человек с калькулем
У каждой картинки естественно свой сверочный ключ.
Но как вы заметили у всех сверочных ключей первые 48 байт одинаковые.
И причём только у правильных(математически) подписей, в результате получается
сверочный ключ, где первые 48 байт:
0001FFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FF003020
300C0608 2A864886 F70D0205 05000410
И похоже это единственная зацепка.
Значит есть какая-то закономерность у правильных подписей.
Как-то же они получаются эти странные закономерности!
И интересно было бы знать сколько всего может быть этих -правильных- подписей?
Если их немного, то можно было бы их все перебрать и найти тот что нужен.
Не знаю есть ли смысл описывать точный алгоритм функции получения
сверочного ключа. Там всего-лишь три операции.
Два сложения и одно вычитание, в цикле(~8192 раз)
Алгоритм получения сверочного ключ я знаю досконально.
Т.к. просидел неделю в ДизАссемблере, разбираясь во всём этом безобразии.
Очень похоже на то, что функция необратима, так как там есть ветвления функции в зависимости
от значения битов подписи. Ветвление такое:
Взять из подписи бит номер Х , Х изменяется от 511 до 0 (цикл 512 раз)
Проверяются по очереди все биты в подписи, начиная со старшего бита.
Если бит X =0 то сложение пропускается
если бит X =1 то делается сложение
и т.д в цикле.
Есть у кого какие идеи?