Добрый день!
Поставили мне такую задачу:
Есть некоторый документ с 2D-кодом, в котором (в 2D-коде) содержится примерно 1Кбайт информации. Это код печатается на спец.принтере в разных местах (несколько тысяч мест) и должен считываться в других местах (несколько десятков тысяч мест). Необходимо защитить информацию в 2D-коде от изменения электронной подписью, печатаемой в этом же 2D-коде, уникальной для каждого из мест, где печатают 2D-код, но так, чтобы проверить эту подпись (и установить место печати) можно было бы в любом месте считывания. Для считывания и печати используются специализированные устройства, подключенные к компьютеру, причем везде разные, но поддерживающие общий стандарт
2D-кодировки при печати и считывании. Т.е. разместить контроллер между устройством печати/считывания и компьютером нереально.Я подумал, что это можно сделать на основе ключа на один из доступных внешних портов компьютера (COM, LPT, USB и т.д.), внутри которого стоит MCU шифрующий или расшифровывающий данные с/на 2D-метку по алгоритму чего-то похожего на PGP с открытым ключом. Т.е. MCU втыкается в порт компьютера, через который ему дается команда на шифрование и данные, которые надо "подписать". Он внутри выполняет шифрацию и возвращает те же самые данные, но с электронной подписью, после чего программа компьютера отправляет их на печать. Так мы получим "скрытый" внутри MCU алгоритм и "скрытые" там же публичный (общий для всех) и секретный (уникальный для этого MCU) ключи, т.е. снизим риск подделки до минимума. Для исключения воровства самого шифрующего контроллера будут приняты жесткие организационные меры и мне сказали, что случай воровства MCU можно в расчет не брать.
Думал еще над тем, что можно взять что-то типа MD5SUM и прямо в генерируемой им контрольной сумме перемешать и раскидать биты номера "шифратора", но мне кажется, что это будет не очень стойко к "взлому".
Отсюда вопросы:
- Получается, что нужен MCU с небольшим кол-вом ног, небогатой периферией, но приличной внутренней памятью и высокой производительностью. Кто что посоветует посмотреть на эту тему?
- Возможно уже были или есть аналогичные готовые или полуготовые решения. Подскажите, где что поискать/посмотреть?
- Нужно ли сертифицировать алгоритм кодирования при условии, что он будет использоваться в гос.структурах?
- Наверняка есть способы/алгоритмы кодирования, оптимизированные под применение на MCU с 8-ми или 16-разрядной арифметикой. Подскажите названия?
- Я всетаки считаю, что случай воровства самого MCU и несанкционированная работа через него в этом случае возможны. Как в таком случае лучше защитить ключ? Пароль, который теоретически можно купить? Сеанс связи через интернет с "разрешающим" работу данного ключа сервером?
P.S. Сразу скажу, что в криптографии я почти полный чайник - имею только общее представление о том, как работает PGP в целом и никакого понятия об используемых им алгоритмах.