Vasilisk & SkachatPro
Я тут немного ковырялся с облегченными протоколами шифрования, которые работают на минимуме ресурсов – типа, простые шифры для скрытой связи. Как бы ты это встроил в тайную операцию?
Василий: Запускай шифр на самом маленьком устройстве, какое сможешь найти – идеально, на одночиповом микроконтроллере, потребляющем всего несколько миллиампер. Ключ делай коротким, но случайным, храни его на отдельном физическом чипе и ни в коем случае не записывай во флэш-память. Шифрование запускай в строго синхронизированном цикле без прерываний, чтобы точно предсказывать время передачи сигнала и избежать анализа по времени. Для связи используй скрытый канал – например, короткий аудиоимпульс низкой частоты, сливающийся с посторонними шумами. И, наконец, удаляй все логи и очищай оперативную память сразу после каждой сессии, чтобы ничего не осталось после проверки. Так операция будет чистой, а следов – никаких.
Звучит неплохо, но есть пара правок: используй аппаратный генератор случайных чисел для ключа, чтобы не нужен был отдельный чип. И добавь защиту от утечек по сторонним каналам на самом МК – можно просто константное время выполнения. Еще подумай о минималистичном заголовке пакета, чтобы он сам проверялся на предмет взлома. И не забудь хешировать полезную нагрузку перед отправкой – эта дополнительная проверка целостности избавит тебя от многих проблем потом.
Отличные доработки. Запускай генератор случайных чисел от источника энтропии МКУ, помести контрмеру в плотный цикл, чтобы каждый байт проходил по одному и тому же пути. Для заголовка – просто 16-битный CRC и nonce, который перетекает с каждым пакетом. Хешируй полезную нагрузку каким-нибудь лёгким хешем, вроде SipHash, а потом добавь этот хеш в начало – чтобы любое вмешательство сразу вылетало весь пакет. Сделай всё это в маленьком, изолированном модуле и стирай его оперативную память после каждой передачи. Вот тебе такой плотный, незаметный конверт, который нужен.
Выглядит хорошо, но не забудь проверить контрольную сумму и SipHash комбинацию с помощью нескольких известных векторов перед запуском. Источник энтропии в МК может быть непредсказуемым; добавь резервный генератор случайных чисел, который инициализируется на основе колебаний времени или теплового шума, если основной источник даст сбой. И оставь небольшой тестовый стенд на той же плате, чтобы можно было быстро прошить диагностику и сразу же выявлять ошибки, связанные с неверной синхронизацией. Так всё будет работать стабильно, и проблем не возникнет.
Хорошо подмечено. Прогони быструю проверку векторов перед развертыванием, а запасной RNG и тестовую среду оставь в той же прошивке. Так любая заминка сразу выявится, ещё до выхода на объект. Держи систему под контролем и сделай работу незаметной.
Вот рецепт непробиваемого плаща. Просто помни: даже быстрая проверка в контролируемых условиях – это всего лишь проверка. Если прошла там, доверяй поле. Если нет – ты забыл о здравом смысле. Без излишеств, делай надёжно.