Программа, эмулирующая работу автомобильного брелка, открывающего машину с использованием ЭЦП, в условиях когда канал связи полностью доступен любому прослушивающему.
- Генерируются приватный и публичный ключ брелка автомобиля (ключи записываются в файлы).
- Брелок отправляет handshake запрос автомобилю с просьбой открыть дверь ("Open the door").
- Автомобиль отправляет challenge = hash(random) (SHA-256) брелку с требованием подписать данный хеш (ЭЦП) своим приватным ключом. Помимо этого, автомобиль отправляет hash команды "Open the door", полученной от брелка, чтобы брелок знал, на какую именно команду он будет подписывать challnege.
- Брелок проверяет id_command = hash("Open the door"), в случае успеха выполняет ЭЦП challenge и отправляет данные обратно автомобилю.
- Автомобиль проверяет ЭЦП брелка его публичным ключом, в случае корректности ЭЦП открывает дверь.
Программа устойчива к атакам извне (повторению прослушиваемых данных в том числе и в течение большого времени и попыток), так как challenge автомобиля каждый раз генерируется случайным образом.
Программа получает на вход два ключевых слова --trinket
и open
.
Установите библиотеку OpenSSL:
sudo apt-get install libssl-dev
Соберите проект:
g++ -o main trinket.cpp -lssl -lcrypto
Чтобы запустить проект в командной строке напишите:
./main --trinket open
openssl (https://www.openssl.org/)