Посоветуйте алгоритм асимметричного шифрования или как защитить открытый ключ от подмены?
Вопрос. Существует ли некий малоизвестный алгоритм асимметричного шифрования (в приложении к цифровой подписи), допускающий генерацию закрытого ключа по заранее известному значению открытого? Подчеркну, речь не идёт о получении открытого ключа из закрытого - это невозможно по определению. Речь идёт о том, чтобы изначально можно было выбрать закрытый ключ такой, чтобы полученный из него открытый ключ был равен заданному. Ну или чтобы открытый ключ можно было бы вычислить из заранее заданного байтового массива.
Как я себе это представляю? Как вариант, в таком алгоритме обратная задача (получение закрытого ключа из открытого) может решаться аналитически, но даёт 100500 ^ 100500 решений, лишь одно из которых верное в соответствии с выбором закрытого ключа (остальные отсеиваются при проверке). Соответственно, можно выбрать одно из этих решений и выбрать на основании его закрытый ключ. Основные же алгоритмы асимметричного шифрования предполагают, что обратная задача аналитически вообще никак не решается.
Зачем это надо? Пишется некоторая оффлайн-утилита, которой для работы нужен некий файл с данными, и его хотелось бы защитить от несанкционированной подмены. Хранение цифровой подписи в бинарнике (в любом виде) бесперспективно, так как узнать её адрес в файле и переписать десяток байтов в бинарнике несложно. Поэтому хотелось бы привязать эту подпись, к примеру, к вычисляемому каждый раз хэшу бинарника (его фрагмента). Либо как-то вычислять этот открытый ключ (цифровую подпись) из этого хэша.
Конечно, ничто не мешает и исполняемый код «пропатчить», убрав все проверки, но для этого злоумышленнику потребуется больший скилл. Этот вариант мы не будем рассматривать.