ПРОТОКОЛ ОТКРЫТОГО РАСПРЕДЕЛЕНИЯ КЛЮЧЕЙ ZRTP (Z REAL-TIME TRANSPORT PROTOCOL) | Протокол ZRTP | |
Протокол распределения ключей | Протокол открытого распределения ключей |
Постановка задачи |
Пусть A (Alice) и B (Bob) - пользователи открытой сети связи. A и B хотят получить общий секретный ключ, используя открытый канал связи, для шифрования дальнейшего обмена с помощью алгоритмов симметричного шифрования. |
Описание протокола |
Данное описание протокола не является завершенным, находится в процессе обработки.
Протокол ZRTP — криптографический протокол согласования ключей шифрования, используемый в системах передачи голоса по IP-сетям (VoIP). ZRTP описывает метод получения ключей по алгоритму Диффи — Хеллмана для организации Secure Real-time Transport Protocol (SRTP). ZRTP осуществляет согласование ключей в том же потоке RTP, по которому установлена аудио/видео связь, то есть не требует отдельного канала связи. Разработан Филипом Циммерманом (Phil Zimmermann, автор Pretty Good Privacy), Джоном Калласом (Jon Callas) и Аланом Джонстоном (Alan Johnston) в 2006 году. Описание протокола было подано в IETF 5-го марта 2006. Режим Диффи-Хеллмана. Выполнение протокола ZRTP начинается после того, как пользователи 1) Пользователь Сообщение Hello состоит из следующих 32-битных (4-байтовых) слов: Заголовок сообщения: 1. 0x1000 Порядковый номер является счетчиком, который увеличивается для каждого отправленного сообщения (ZRTP-пакета). 2. 0x5a525450 (ZRTP Magic Cookie, в ASCII соответствует слову "ZRTP") (1 слово) 3. Идентификатор источника (Source Identifier) (1 слово) Идентификатор источника является 32-битным числовым SSRC-идентификатором источника потока RTP-пакетов, к которому относится сообщение (ZRTP-пакет). Сообщение: 4. 0x505a (preamble value, преамбула) Длина сообщения является количеством 32-битных слов в сообщении, исключая заголовок (слова 1-3) и контрольную сумму CRC в конце сообщения. 5. 0x48656c6c6f202020 (Message Type Block, в ASCII соответствует слову "Hello " (Hello с тремя пробелами), 64 бит) (2 слова) 6. Версия ZRTP-протокола (version), например 0x312e3130, что в ASCII соответствует слову "1.10" (1 слово) 7. Идентификатор клиента cid (Client Identifier, 128 бит) (4 слова) Идентификатор клиента определяет производителя и версию программного обеспечения ZRTP. 8. Хэш-образ H3 (Hash image, 256 бит) (8 слов) Вычисление хэш-образа H3 проводится перед каждой сессией следующим образом: Отправитель сообщения, т.е. пользователь Вычисляется H1=H(H0), где H - поддерживаемая протоколом хэш-функция SHA-256, значение которой усечено до 256 бит. Вычисляется H2=H(H1). Вычисляется H3=H(H2). 9. Уникальный идентификатор ZID пользователя ZID случайным образом генерируется программным обеспечением во время инсталляции или инициализации. 10. 0 S=1, если пользователь способен обрабатывать и проверять цифровые подписи. S=0, если цифровые подписи не поддерживаются. M=1, если пользователь имеет возможность отправлять сообщение SASrelay, в противном случае M=0. P=1, если пользователь не имеет возможности отправлять сообщение Commit, т.е. пользователь не может быть инициатором безопасного сеанса, а только респондентом, в противном случае P=0. hc=0 (cc=0, ac=0, kc=0, sc=0), если поддерживаются только обязательные к реализации алгоритмы. Обязательные алгоритмы могут быть включены в список. Порядок списка указывает на предпочтения пользователя. Если обязательный алгоритм не включен в список, то он неявно добавляется в конец списка предпочтений. 11. Поддерживаемые алгоритмы хеширования (Hash algorithms) (0-7 слов) Например, 0x53323536, что в ASCII соответствует слову "S256" (хэш-функция SHA-256, определяемая в стандарте NIST FIPS PUB 180-3, поддерживается протоколом в обязательном порядке). 0x53333834, что в ASCII соответствует слову "S384" (хэш-функция SHA-384, рекомендуется протоколом, а в случае использования ECDH-384, алгоритма Диффи-Хеллмана на эллиптических кривых, поддерживается протоколом в обязательном порядке). 0x4e323536, что в ASCII соответствует слову "N256" (256-битная хэш-функция SHA-3, определяемая в проекте стандарта NIST, может дополнительно использоваться). 0x4e333834, что в ASCII соответствует слову "N384" (384-битная хэш-функция SHA-3, определяемая в проекте стандарта NIST, может дополнительно использоваться). Возможно использование других хэш-функций. 12. Поддерживаемые алгоритмы шифрования (Cipher algorithms) (0-7 слов) Например, 0x41455331, что в ASCII соответствует слову "AES1" (алгоритм шифрования AES-128, определяемый в стандарте NIST FIPS PUB 197, поддерживается протоколом в обязательном порядке). 0x41455332, что в ASCII соответствует слову "AES2" (алгоритм шифрования AES-192, может использоваться). 0x41455333, что в ASCII соответствует слову "AES3" (алгоритм шифрования AES-256, может использоваться). 0x32465331, что в ASCII соответствует слову "2FS1" (алгоритм шифрования TwoFish с 128-битными ключами, может использоваться). 0x32465332, что в ASCII соответствует слову "2FS2" (алгоритм шифрования TwoFish с 192-битными ключами, может использоваться). 0x32465333, что в ASCII соответствует слову "2FS3" (алгоритм шифрования TwoFish с 256-битными ключами, может использоваться). Возможно использование других алгоритмов шифрования с такими же размерами блоков и длинами ключей. 13. Поддерживаемые типы аутентификационных тегов (SRTP Auth Tag Types) (0-7 слов) Например, 0x48533332, что в ASCII соответствует слову "HS32" (32-бит аутентификационный тег, основанный на HMAC-SHA1, как определено в документе RFC 3711, поддерживается протоколом в обязательном порядке). 0x48533830, что в ASCII соответствует слову "HS80" (80-бит аутентификационный тег, основанный на HMAC-SHA1, как определено в документе RFC 3711, поддерживается протоколом в обязательном порядке). 0x534b3332, что в ASCII соответствует слову "SK32" (32-бит аутентификационный тег, основанный на Skein-512-MAC, с 256-битным ключом и 32-битным МАС длиной, может использоваться). 0x534b3634, что в ASCII соответствует слову "SK64" (64-бит аутентификационный тег, основанный на Skein-512-MAC, с 256-битным ключом и 64-битным МАС длиной, может использоваться). Возможно использование других аутентификационных тегов. 14. Поддерживаемые протоколы согласования ключей (Key Agreement Types) (0-7 слов) Например, 0x4448336b, что в ASCII соответствует слову "DH3k" (протокол Диффи-Хеллмана с параметром p=3072 бит, как определено в документе RFC 3526, поддерживается протоколом в обязательном порядке). 0x4448326b, что в ASCII соответствует слову "DH2k" (протокол Диффи-Хеллмана с параметром p=2048 бит, как определено в документе RFC 3526, может использоваться). 0x45433235, что в ASCII соответствует слову "EC25" (протокол Диффи-Хеллмана на эллиптических кривых с параметром p=256 бит, как определено в документе RFC 5114, может использоваться). 0x45433338, что в ASCII соответствует слову "EC38" (протокол Диффи-Хеллмана на эллиптических кривых с параметром p=384 бит, как определено в документе RFC 5114, может использоваться). 0x45433532, что в ASCII соответствует слову "EC52" (протокол Диффи-Хеллмана на эллиптических кривых с параметром p=521 бит, как определено в документе RFC 5114, не рекомендуется протоколом из-за существеннного вычислительного замедления). 0x50727368, что в ASCII соответствует слову "Prsh" (режим предустановленного ключа, поддерживается протоколом в рекомендательном порядке). 0x4d756c74, что в ASCII соответствует слову "Mult" (многопоточный режим, поддерживается протоколом в обязательном порядке, если пользователь поддерживает несколько одновременных мультимедиа потоков). 15. Поддерживаемые типы SAS (SAS Types) (SAS (Short Authentication String) - короткая строка аутентификации) (0-7 слов) Например, 0x42333220, что в ASCII соответствует слову "B32 " (B32 с одним пробелом) (SAS с кодировкой base32, поддерживается протоколом в обязательном порядке). 0x42323536, что в ASCII соответствует слову "B256" (SAS с кодировкой base256, может использоваться). 16. Код аутентичности сообщения MAC (message authentication code, 64 бит) (2 слова) Для вычисления кода аутентичности сообщения используется алгоритм HMAC (hash-based message authentication code) на основе поддерживаемой протоколом хэш-функции H (SHA-256) и c секретным ключом Вычисление проводится следующим образом: Определяется - если длина ключа - если длина ключа - если длина ключа Вычисляется Вычисляется Вычисляется хэш-функция Вычисляется Вычисляется Вычисляется 64 крайние левые биты полученной строки определяют код аутентичности сообщения MAC. 17. Контрольная сумма (Cyclic Redundancy Check (CRC), циклический избыточный код) (1 слово) Для вычисления контрольной суммы используется 32-битный циклический избыточный код CRC-32с (Castagnoli) с порождающим многочленом G(x)= Вычисление проводится следующим образом: Передаваемое сообщение представляется в виде последовательности байтов, пронумерованных от 0 до N-1. Биты этой последовательности рассматриваются как коэффициенты многочлена M(x) степени 8N-1. При этом наименее значащий бит байта j (0-ой бит) является коэффициентом при Многочлен M(x) умножается на Коэффициенты многочлена R(x) рассматриваются как последовательность из 32 бит (последовательность из 4 байтов). При этом коэффициент при Эта последовательность и определяет контрольную сумму CRC. 2) В случае успешного получения и проверки сообщения Hello от пользователя Сообщение HelloACK состоит из следующих 32-битных (4-байтовых) слов: Заголовок сообщения: 1. 0x1000 2. 0x5a525450 (ZRTP Magic Cookie, в ASCII соответствует слову "ZRTP") (1 слово) 3. Идентификатор источника (Source Identifier) (1 слово) Сообщение: 4. 0x505a (preamble value, преамбула) 5. 0x48656c6c6f41434b (Message Type Block, в ASCII соответствует слову "HelloACK", 64 бит) (2 слова) 6. Контрольная сумма (Cyclic Redundancy Check (CRC), циклический избыточный код) (1 слово) 3) Пользователь 4) В случае успешного получения и проверки сообщения Hello от пользователя 5) Пользователь Сообщение Commit состоит из следующих 32-битных (4-байтовых) слов: Заголовок сообщения: 1. 0x1000 2. 0x5a525450 (ZRTP Magic Cookie, в ASCII соответствует слову "ZRTP") (1 слово) 3. Идентификатор источника (Source Identifier) (1 слово) Сообщение: 4. 0x505a (preamble value, преамбула) 5. 0x436f6d6d69742020 (Message Type Block, в ASCII соответствует слову "Commit " (Commit с двумя пробелами), 64 бит) (2 слова) 6. Хэш-образ H2 (Hash image, 256 бит) (8 слов) 7. Уникальный идентификатор пользователя ZID должен совпадать с ZID, указанным в сообщении Hello пользователя 8. Алгоритм хеширования, выбранный пользователем 9. Алгоритм шифрования, выбранный пользователем 10. Тип аутентификационного тега, выбранный пользователем 11. Протокол согласования ключей, выбранный пользователем 12. Тип SAS, выбранный пользователем 13. Хэш-значение hvi (hash value of initiator) (8 слов) hvi = H(сообщение DHPart2 (без заголовка) пользователя 14. Код аутентичности сообщения (MAC, 64 бит) (2 слова) Для вычисления кода аутентичности сообщения используется алгоритм HMAC (hash-based message authentication code) на основе поддерживаемой протоколом хэш-функции H (SHA-256) и c секретным ключом 15. Контрольная сумма (Cyclic Redundancy Check (CRC), циклический избыточный код) (1 слово) 6) В случае успешного получения и проверки сообщения Commit от пользователя Сообщение DHPart1 состоит из следующих 32-битных (4-байтовых) слов: Заголовок сообщения: 1. 0x1000 2. 0x5a525450 (ZRTP Magic Cookie, в ASCII соответствует слову "ZRTP") (1 слово) 3. Идентификатор источника (Source Identifier) (1 слово) Сообщение: 4. 0x505a (preamble value, преамбула) Длина сообщения зависит от выбранного протокола согласования ключей. Например, если выбран "DH3k", то длина = 117 слов. Если выбран "DH2k", то длина = 85 слов. Если выбран "EC25", то длина = 37 слов. Если выбран "EC38", то длина = 45 слов. Если выбран "EC52", то длина = 54 слова. 5. 0x4448506172743120 (Message Type Block, в ASCII соответствует слову "DHPart1 " (DHPart1 с одним пробелом), 64 бит) (2 слова) 6. Хэш-образ H1 (Hash image, 256 бит) (8 слов) 7. Необратимый хэш rs1IDr = MAC("Responder") (64 бит) (2 слова) Для вычисления rs1IDr используется алгоритм HMAC (hash-based message authentication code) на основе согласованной (в сообщении Commit) хэш-функции H и c секретным ключом rs1, являющимся некоторым согласованным с пользователем 8. Необратимый хэш rs2IDr = MAC("Responder") (64 бит) (2 слова) Для вычисления rs2IDr используется алгоритм HMAC (hash-based message authentication code) на основе согласованной (в сообщении Commit) хэш-функции H и c секретным ключом rs2, являющимся некоторым согласованным с пользователем 9. Необратимый хэш auxsecretIDr = MAC(H3 пользователя Для вычисления auxsecretIDr используется алгоритм HMAC (hash-based message authentication code) на основе согласованной (в сообщении Commit) хэш-функции H и c секретным ключом auxsecret, являющимся некоторым согласованным с пользователем 10. Необратимый хэш pbxsecretIDr = MAC("Responder") (64 бит) (2 слова) Для вычисления pbxsecretIDr используется алгоритм HMAC (hash-based message authentication code) на основе согласованной (в сообщении Commit) хэш-функции H и c секретным ключом pbxsecret, являющимся некоторым вычисленным в предыдущей сессии, согласованным с пользователем 11. Открытый ключ Количество слов n зависит от выбранного протокола согласования ключей. Например, если выбран "DH3k", то n = 96 слов. Если выбран "DH2k", то n = 64 слова. Если выбран "EC25", то n = 16 слов. Если выбран "EC38", то n = 24 слова. Если выбран "EC52", то n = 33 слова. 12. Код аутентичности сообщения (MAC, 64 бит) (2 слова) Для вычисления кода аутентичности сообщения используется алгоритм HMAC (hash-based message authentication code) на основе поддерживаемой протоколом хэш-функции H (SHA-256) и c секретным ключом 13. Контрольная сумма (Cyclic Redundancy Check (CRC), циклический избыточный код) (1 слово) 7) В случае успешного получения и проверки сообщения DHPart1 от пользователя Сообщение DHPart2 состоит из следующих 32-битных (4-байтовых) слов: Заголовок сообщения: 1. 0x1000 2. 0x5a525450 (ZRTP Magic Cookie, в ASCII соответствует слову "ZRTP") (1 слово) 3. Идентификатор источника (Source Identifier) (1 слово) Сообщение: 4. 0x505a (preamble value, преамбула) Длина сообщения зависит от выбранного протокола согласования ключей. Например, если выбран "DH3k", то длина = 117 слов. Если выбран "DH2k", то длина = 85 слов. Если выбран "EC25", то длина = 37 слов. Если выбран "EC38", то длина = 45 слов. Если выбран "EC52", то длина = 54 слова. 5. 0x4448506172743220 (Message Type Block, в ASCII соответствует слову "DHPart2 " (DHPart2 с одним пробелом), 64 бит) (2 слова) 6. Хэш-образ H1 (Hash image, 256 бит) (8 слов) 7. Необратимый хэш rs1IDi = MAC("Initiator") (64 бит) (2 слова) Для вычисления rs1IDi используется алгоритм HMAC (hash-based message authentication code) на основе согласованной (в сообщении Commit) хэш-функции H и c секретным ключом rs1, являющимся некоторым согласованным с пользователем 8. Необратимый хэш rs2IDi = MAC("Initiator") (64 бит) (2 слова) Для вычисления rs2IDi используется алгоритм HMAC (hash-based message authentication code) на основе согласованной (в сообщении Commit) хэш-функции H и c секретным ключом rs2, являющимся некоторым согласованным с пользователем 9. Необратимый хэш auxsecretIDi = MAC(H3 пользователя Для вычисления auxsecretIDi используется алгоритм HMAC (hash-based message authentication code) на основе согласованной (в сообщении Commit) хэш-функции H и c секретным ключом auxsecret, являющимся некоторым согласованным с пользователем 10. Необратимый хэш pbxsecretIDi = MAC("Initiator") (64 бит) (2 слова) Для вычисления pbxsecretIDi используется алгоритм HMAC (hash-based message authentication code) на основе согласованной (в сообщении Commit) хэш-функции H и c секретным ключом pbxsecret, являющимся некоторым вычисленным в предыдущей сессии, согласованным с пользователем 11. Открытый ключ Количество слов n зависит от выбранного протокола согласования ключей. Например, если выбран "DH3k", то n = 96 слов. Если выбран "DH2k", то n = 64 слова. Если выбран "EC25", то n = 16 слов. Если выбран "EC38", то n = 24 слова. Если выбран "EC52", то n = 33 слова. 12. Код аутентичности сообщения (MAC, 64 бит) (2 слова) Для вычисления кода аутентичности сообщения используется алгоритм HMAC (hash-based message authentication code) на основе поддерживаемой протоколом хэш-функции H (SHA-256) и c секретным ключом 13. Контрольная сумма (Cyclic Redundancy Check (CRC), циклический избыточный код) (1 слово) 8) В случае успешного получения и проверки сообщения DHPart2 от пользователя Сообщение Confirm1 состоит из следующих 32-битных (4-байтовых) слов: Заголовок сообщения: 1. 0x1000 2. 0x5a525450 (ZRTP Magic Cookie, в ASCII соответствует слову "ZRTP") (1 слово) 3. Идентификатор источника (Source Identifier) (1 слово) Сообщение: 4. 0x505a (preamble value, преамбула) 5. 0x436f6e6669726d31 (Message Type Block, в ASCII соответствует слову "Confirm1", 64 бит) (2 слова) 6. confirmmac = MAC(mackeyr, зашифрованная часть сообщения Confirm1) (64 бит) (2 слова) 7. Вектор инициализации (CFB Initialization Vector, 128 бит) (4 слова) Следующая часть сообщения (слова 8-13) зашифровываются в режиме CFB с указанным вектором инициализации и ключом zrtpkeyr. 8. Хэш-прообраз H0 (Hash preimage, 256 бит) (8 слов) 9. x00 |
Основные сведения | |
|
|
|
|