ECIES

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

ECIES (англ. Elliptic Curve Integrated Encryption Scheme) — це схема шифрування на відкритих ключах, що ґрунтується на еліптичних кривих. Цю схему запропонував Віктор Шоуп 2001. ECIES використовується в різних стандартах, наприклад ANSI X9.63, IEEE 1363a, ISO 18033-2 і SECG SEC 1.

Історична довідка[ред. | ред. код]

1997 року вчені Михир Беллар і Філ Рогевей винайшли схему DLAES (Discrete Logarithm Augmented Encryption Scheme), яка згодом перейменована на DHAES (Diffie-Hellman Augmented Encryption Scheme) 1998, а пізніше, щоб уникнути плутанини з абревіатурою AES, перейменована на DHIES (Diffie-Hellman Integrated Encryption Scheme). DHIES є вдосконаленою схемою Ель-Гамаля, в якій використовуються еліптичні криві, різні алгоритми імітовставки й хеш-функції[1].

DHIES була оцінена ANSI й, з деякими модифікаціями, схема включена до стандарту ANSI X9.63 2001. Так само, незалежно з деякими поправками, схема включена до стандарту IEEE 1363 2000. 2004, коли стандарт ANSI X9.63 став загальнодоступним, IEEE переглянула схему з урахуванням переваг двох попередніх стандартів ANSI X9.63 й IEEE 1363, і включила нову схему стандарт IEEE 1363a 2004.

Всі перераховані вище схеми отримали загальну назву ECIES (Elliptic Curve Integrated Encryption Scheme).

2009 одна з версій ECIES ввійшла в стандарт ISO/IEC 18033-2, а 2009 до стандарту SECG SEC 1[1].

Опис алгоритму[ред. | ред. код]

ECIES (Elliptic Curve Integrated Encryption Scheme) має в собі декілька функцій:

  1. Key Agreement (KA) — функція для генерації загального секрету. Наприклад, протокол Діффі — Геллмана або його модифікації.
  2. Key Derivation Function (KDF) — функція для генерації загальних ключів з деякого набору даних і параметрів.
  3. Encriptyon (ENC) — алгоритм шифрування, що використовується обома сторонами.
  4. Method Authentication Code (MAC) — функція для генерації автентифікаційних даних (імітовставка).
  5. Hash (HASH) — функція хешування (використовується в MAC і KDF).

Вхідні параметри алгоритму[ред. | ред. код]

Перша сторона — Аліса:[2]

  •  — відкритий ключ Боба
  •  — власний закритий ключ
  • Ε — група точок еліптичної кривої над
  • G — циклічна підгрупа групи точок E еліптичної кривої
  • g — генератор підгрупи G

Друга сторона — Боб:[2]

  •  — відкритий ключ
  •  — власний закритий ключ
  • Ε — група точок еліптичної кривої над
  • G — підгрупа групи точок E еліптичної кривої
  • g — генератор підгрупи G

Шифрування[ред. | ред. код]

Припустимо, Аліса хоче послати повідомлення Бобу. Аліси має відкритий ключ Боба у Боба — відповідний закритий ключ , також Аліса генерує тимчасову пару своїх відкритого і закритого ключів. Закриті ключі — елементи кінцевого поля (поля, на якому задана еліптична крива), а відкриті ключі — точки, що належать еліптичній кривій і обчислені як добуток закритого ключа і генератора g еліптичної кривої[3].

Для відправки повідомлення Аліса виконує наступні дії:[3]

  • За допомогою методу генерації загального секрету KA Аліса обчислює загальний секрет = × (за протоколом Діффі — Геллмана).
  • Використовуючи отриманий загальний секрет і метод отримання ключів з ключовою і додатковою інформацією KDF, Аліса отримує ключ шифрування , а також ключ для обчислення імітовставки .
  • Взявши ключ , зашифроване повідомлення та інші, заздалегідь обговорені сторонами параметри, Аліса обчислює тег повідомлення за допомогою функції MAC.
  • Аліса відправляє Бобу {, , }.

Розшифрування[ред. | ред. код]

Щодо процесу розшифрування кроки, які повинен виконати Боб, є наступними:[4]

  • З допомогою отриманого відкритого ключа Аліси й свого закритого ключа отримати загальний секрет = × ключі шифрування і імітовставки .
  • За допомогою ключів шифрування й імітовставки обчислити тег повідомлення і порівняти його з отриманим тегом. Якщо вони не збігаються, Боб повинен відхилити повідомлення через невдачу у процедурі перевірки MAC.
  • Якщо теги виявляться однаковими, то Боб може продовжити процес, розшифровуючи зашифроване повідомлення , використовуючи симетричний алгоритм Encryption і .

Порівняння з іншими алгоритмами[ред. | ред. код]

Безпека ECIES ґрунтується на обчислювальній складності задачі дискретного логарифмування в групі точок еліптичної кривої (ECDLP). Криптографічні алгоритми також можуть ґрунтуватися на обчислювальній складності завдань факторизації (приклад алгоритму: RSA) і дискретного логарифмування (схема Ель-Гамаля). Однак ECDLP вважається найскладнішою[5] з цих трьох задач, що призводить до важливої переваги ECIES: розмір ключа.

Порівняння довжин ключів ECIES і RSA[6]
Рівень безпеки (біт) Довжина ключа RSA (біт) Довжина ключа ECIES (біт)
80 1024 160—223
112 2048 224—255
128 3072 256—283
192 7680 384—511
256 15360 512—571

Перевага в розмірі ключа дозволяє ставити менші вимоги до апаратного забезпечення (наприклад, до розмірів буфера, оперативної та фізичної пам'яті; до пропускної здатності каналу у разі передачі ключів мережею).

Важливим недоліком ECIES порівняно з іншими криптографічними алгоритмами є існування декількох версій ECIES, описуваних різними стандартами (ANSI X9.63, IEEE 1363a, ISO/IEC 18033-2 і SECG SEC 1). Відмінності між даними стандартами — вибір конкретних функцій і параметрів для реалізації складових ECIES (KA, KDF, ENC, MAC, HASH). Недолік полягає в тому, що неможливо реалізувати версію ECIES, що задовольняє всім стандартам[6].

Відомі атаки на ECIES[ред. | ред. код]

«М'яка вразливість»[ред. | ред. код]

Віктор Шоуп (англ. Victor Shoup) довів[7], що якщо публічний ключ U не включений у вхідні дані функції KDF і якщо в KDF використовується тільки x-координата розділеного секрету, то ECIES вразливий до атак на основі адаптивного шифротексту (англ. Adaptive Chosen Ciphertext Attacks (CCA2)). Уразливість названа «м'якою», оскільки жодна атака не змогла отримати значущу інформацію з використанням цієї уразливості.

Одне з можливих рішень, запропонованих Шоупом — додати публічний ключ U у вхідні дані функції KDF.

Уразливість при використанні функції XOR[ред. | ред. код]

Шоуп також довів[8], що схема ECIES може бути вразлива, коли функція XOR використовується при шифруванні повідомлень змінної довжини. Зокрема, це може привести до вразливості до атак на основі адаптивного шифротексту (англ. Adaptive Chosen Ciphertext Attacks (CCA2)). Можливі рішення:

  • Зафіксувати довжину відкритого тексту[8].
  • Інтерпретувати вихідні дані функції KDF як ||[9].
  • Заборонити використання потокових фільтрів в ECIES (дозволити тільки блочні шифри)[10].

Атака малими підгрупами (англ. Small subgroup attack)[ред. | ред. код]

Даний тип атак можливий, коли супротивник спеціально надає невірний публічний ключ. Якщо відправник не перевіряє справжність публічного ключа іншого боку, то супротивник зможе підмінити публічний ключ на ключ меншого розміру з метою отримання розділеного секрету або отримання інформації про закриті ключі відправника. Можливі рішення:

  • Перевіряти правильність публічного ключа, наданого приймаючою стороною[11].
  • Замінити розділений секрет на його хеш у вхідних даних функції KDF[11].

Можливі конфігурації ECIES[ред. | ред. код]

Приклад[12] ефективної й безпечної реалізації ECIES, сумісний зі стандартами IEEE 1363a і ISO/IEC 18033-2:

  • KA: протокол Діффі — Геллмана
  • Hash: SHA-512 (SHA-256 для пристроїв з обмеженими ресурсами).
  • KDF: KDF2.
  • ENC: AES-128 в режимі зчеплення блоків CBC mode.
  • MAC: HMAC-SHA-512 (HMAC-SHA-256 для пристроїв з обмеженими ресурсами).
  • Розділення секрету: Використовувати тільки першу координату (без хешування).
  • Інтерпретація вихідних даних KDF: ||.
  • Схема генерації еліптичної кривої: Brainpool (RFC 5639).

Примітки[ред. | ред. код]

Література[ред. | ред. код]

Статті[ред. | ред. код]