Позвольте мне попытаться переформулировать проблему, так как это может немного помочь. Требования следующие:
- В начале соединения две конечные точки выполняют алгоритм Диффи-Хеллмана для получения общего ключа. $К$.
- Затем EP1 необходимо сгенерировать случайное 48-битное значение. $R$ и отправить его в EP2. Это случайное значение должно обладать следующими двумя свойствами:
злоумышленник не может угадать следующие случайные значения, которые генерирует EP1, и (b) EP2 может проверить, что $R$ действительно происходит из EP1.
- Две конечные точки также совместно используют значение информации о времени. $Т$, который похож на счетчик времени и является 64-битным. Я не знаю большего, я просто знаю, что это значение уникально в каждой ассоциации и известно обоим EP.
- Под ассоциацией я подразумеваю полную последовательность шагов 1-4 выше. Если EP отключаются, они запускают эти сообщения с самого начала, но оба EP удаляют ключ. $К$ и установить новую в следующей ассоциации.
Итак, чтобы немного изменить мой ответ выше, я подумал о следующем решении:
ЭП1 ЭП2
-----------------------------------------|
1.s1 = AES-CTR(K,T||счетчик,K) --------->|
2.R1 = s1 XOR K--------------------------------------->|
| 3. s1' = AES-CTR(K,T||счетчик,K)
| 4. R1' = s1' Исключающее ИЛИ K
| Проверить R1' == R1
На шаге 1 EP1 использует AES в режиме CTR с ключом $К$, поле nonce/counter должно быть конкатенацией $T||счетчик$, и сообщение, которое нужно зашифровать, снова $К$.
На шаге 2 случайно выглядящее значение $s_1$ с шага 1 xored с тем же ключом $К$ и последние 48 бит отправляются в EP2. я повторно использую $К$ в качестве входного сообщения просто потому, что это известное значение для EP2, и поэтому он может проверить зашифрованное значение. Но дайте мне знать, если это плохая практика.
На шагах 3 и 4 EP2 выполняет те же вычисления, поскольку все значения являются общими, а на шаге 5 проверяет, $R_1'==R_1$. Если это так, это означает, что EP1 аутентифицирован, поскольку он должен использовать правильный ключ. $К$, а также $R_1$ значения не должны быть предсказуемы.
Видите ли вы какие-либо недостатки или излишества в моей схеме? Выполнит ли он требования, упомянутые в начале моего поста?