Призначення ПЗ та приклади споживачів, які можуть бути зацікавлені у використанні ПЗ:
Вбудована бібліотека SSL wolfSSL (раніше CyaSSL) — це полегшена бібліотека SSL/TLS, написана на ANSI C і призначена для вбудованих систем, середовищ з обмеженими ресурсами та середовищ з обмеженими ресурсами, головним чином через її невеликий розмір, швидкість і набір функцій. Він також широко використовується в стандартних операційних середовищах через його безоплатну ціноутворення та відмінну міжплатформенну підтримку. wolfSSL підтримує галузеві стандарти до поточних TLS 1.3 і DTLS 1.2, у 20 разів менше, ніж OpenSSL, і пропонує прогресивні шифри, такі як групи ChaCha20, Curve25519, Blake2b і Post-Quantum TLS 1.3. Порівняльний аналіз і відгуки користувачів повідомляють про значно кращу продуктивність при використанні wolfSSL над OpenSSL.
wolfSSL працює на основі криптографічної бібліотеки wolfCrypt. Дві версії wolfCrypt пройшли перевірку FIPS 140-2 (сертифікат №2425 і сертифікат №3389). Триває перевірка FIPS 140-3.
Запитання 1.2
Опишіть знайдену вразливість , переклавшу на українську мову розділ Description.
У wolfSSL до 5.5.2, якщо функції зворотного виклику ввімкнено (через прапор WOLFSSL_CALLBACKS), тоді зловмисний клієнт TLS 1.3 або мережевий зловмисник може ініціювати перечитування буфера в купі розміром 5 байтів. (WOLFSSL_CALLBACKS призначений лише для налагодження.)
Запитання 1.3
Наведіть фрагменти прикладів уразливого програмного коду, розглянувши розділ References to Advisories, Solutions, and Tools.
Якщо під час створення wolfSSL установлено макрос WOLFSSL_CALLBACKS, під час обробки клієнтських з’єднань TLS 1.3 виникає потенційне перечитування купи розміром 5 байтів. Це перечитування купи обмежено збірками wolfSSL, які явно встановлюють макрос WOLFSSL_CALLBACKS, ця функція не вмикається жодними іншими параметрами збірки. Макрос WOLFSSL_CALLBACKS призначений лише для налагодження, але якщо його ввімкнено у виробництві, користувачам рекомендується вимкнути WOLFSSL_CALLBACKS. Користувачам, які ввімкнули WOLFSSL_CALLBACKS, рекомендується оновити свою версію wolfSSL.
Запитання 2.1
Розшифруйте абревіатурну назву криптографічного алгоритму та режиму шифрування та вкажіть роки їх створення.
bf-cfb
Алгоритм bf:
Blowfish — це блоковий шифр із симетричним ключем, розроблений у 1993 році Брюсом Шнайєром і включений до багатьох наборів шифрів і продуктів шифрування. Blowfish забезпечує хорошу швидкість шифрування в програмному забезпеченні, і на сьогоднішній день не знайдено ефективного криптоаналізу. Однак Advanced Encryption Standard (AES) тепер отримує більше уваги, і Schneier рекомендує Twofish для сучасних програм.[3]
Шнайєр розробив Blowfish як алгоритм загального призначення, призначений як альтернатива застарілому DES і вільний від проблем і обмежень, пов’язаних з іншими алгоритмами. На момент випуску Blowfish багато інших розробок були запатентованими, обтяженими патентами або становили комерційну чи державну таємницю. Шнайер заявив, що «Blowfish не запатентований і залишиться таким у всіх країнах. Цим алгоритм розміщується у відкритому доступі та може вільно використовуватися будь-ким».
Режим шифрування: CFB
Режим зворотного зв'язку по шифротексту, режим гамування зі зворотним зв'язком (Cipher Feedback Mode, CFB) — один з варіантів використання симетричного блокового шифру, при якому для шифрування наступного блоку відкритого тексту він складається за модулем 2 з перешифрованим (блоковим шифром) результатом шифрування .
Запитання 2.2
Опишіть переваги та недоліки криптографічного алгоритму
У своїй книзі «Прикладна криптографія» [28] Брюс Шнайєр навів такі обмеження алгоритму Blowfish.
«Алгоритм Blowfish не підходить для застосування у випадках, коли потрібна часта зміна ключів». Процедура розширення ключа є досить ресурсомісткою, тому одна з переваг алгоритму Blowfish - досить висока швидкість шифрування - проявляється тільки в тих випадках, якщо на одному ключі шифрується досить великий обсяг інформації. І навпаки, якщо змінювати ключ після кожного з блоків, що шифруються, швидкість алгоритму стає катастрофічно низькою саме через необхідність щоразу виконувати розширення ключа. Сам Шнайєр рекомендує у додатках, де критична швидкість, зберігати вже розгорнутий ключ (тобто значення АГ1…ЛГ18 і 5j…54) і завантажувати його повністю замість виконання розширення вихідного ключа шифрування [28].
«Великі вимоги до пам'яті не дозволяють використовувати цей алгоритм у смарт-картах». Варто сказати, що принципова можливість реалізації алгоритму в смарт-картах була однією з важливих умов при виборі нового стандарту шифрування США на конкурсі AES, тобто цей недолік алгоритму Blowfish можна вважати серйозним [284].
Крім того, варто відзначити і менш серйозні недоліки алгоритму:
неможливість розширення ключа паралельно процесу шифрування;
невеликий за сучасними мірками розмір блоку даних, що шифруються.
Алгоритм Blowfish має досить серйозні переваги, зокрема:
висока швидкість шифрування на розгорнутому ключі
простота алгоритму, що знижує ймовірність помилок під час його реалізації;
відсутність відомих успішних атак на повнораундову версію алгоритму.
Запитання 2.3
Опишіть переваги та недоліки режиму шифрування.
Режим шифрування зі зворотним зв'язком (CFB) замість перетворення всього блоку перетворює в шифрований текст невеликі фрагменти відкритого тексту. У цьому режимі використовується регістр зсуву довжиною в один блок, розділений на секції. Наприклад, при розмірі блоку у вісім байт і побайтовій обробці регістр зсуву розділений на вісім секцій. При спотворенні біта в зашифрованому тексті спотворюється біт відкритого тексту і руйнується регістр зсуву. Це призводить до спотворення декількох наступних фрагментів відкритого тексту до тих пір, поки спотворений біт не досягне межі регістра зсуву. Розмір порції даних зворотного зв'язку за замовчуванням може залежати від алгоритму, але зазвичай дорівнює 8 бітам або бітам у блоці. Кількість бітів зворотного зв'язку може бути змінена з допомогою властивості FeedbackSize. Алгоритми, що підтримують CFB, використовують цю властивість для налаштування зворотного зв'язку.
CFB, OFB і CTR мають дві переваги в порівнянні з режимом CBC: блоковий шифр завжди використовується тільки при шифруванні, і повідомлення не потрібно збільшувати до розміру, кратного розміру блоку шифру (хоча крадіжка шифрованого тексту також може зробити повідомлення марним).
Використання режиму CFB з частковим блоком в якості зворотного зв'язку дозволяє зменшити середню довжину циклу в 2 і більше разів. Математична модель, запропонована Девісом і Паркіном і підтверджена експериментальними результатами, показала, що тільки при наявності зворотного зв'язку може бути досягнута середня довжина циклу, близька до максимальної.
Основними її недоліками є те, що шифрування є послідовним (тобто не може бути розпаралелене), а також те, що повідомлення повинно мати розмір, кратний розміру блоку шифрування. Одним із способів вирішення цієї проблеми є метод, відомий як крадіжка шифрованого тексту. Зауважимо, що зміна в один біт відкритого тексту або ініціалізації (IV) впливає на всі наступні блоки зашифрованого тексту.
Розшифрування з неправильною ІВ призводить до того, що перший блок відкритого тексту буде пошкоджений, але наступні блоки відкритого тексту будуть правильними. Це пов'язано з тим, що кожний блок XORed з шифротекстом попереднього блоку, а не з відкритим текстом, тому немає необхідності розшифровувати попередній блок перед тим, як використовувати його в якості IV для розшифрування поточного блоку. Це означає, що блок відкритого тексту може бути відновлений з двох блоків шифрованого тексту. Як наслідок, дешифрування може бути розпаралелене. Зауважимо, що зміна одного біта в зашифрованому тексті є повною зміною відповідного блоку відкритого тексту і інвертує відповідні біти в блоці відкритого тексту, але залишає інші блоки недоторканими. Ця особливість використовується в різних атаках на оракул з підстановкою, таких як POODLE.
Системи явної ініціалізації використовують цю властивість, додаючи до відкритого тексту один випадковий блок. Шифрування виконується як зазвичай, за винятком того, що IV не потрібно виконувати розшифровку. Незалежно від того, що використовується для дешифрування ІВ, "зіпсованим" виявляється тільки випадковий блок. Його можна спокійно відкинути, а решта розшифровки буде вихідним відкритим текстом.
Запитання 1.1
Опишіть ПЗ, в якому знайдено вразливість:
Назва ПЗ, URL-посилання в інтернеті (знайти через пошукову систему):
The wolfSSL embedded SSL library, https://github.com/wolfSSL/wolfssl
Призначення ПЗ та приклади споживачів, які можуть бути зацікавлені у використанні ПЗ:
Вбудована бібліотека SSL wolfSSL (раніше CyaSSL) — це полегшена бібліотека SSL/TLS, написана на ANSI C і призначена для вбудованих систем, середовищ з обмеженими ресурсами та середовищ з обмеженими ресурсами, головним чином через її невеликий розмір, швидкість і набір функцій. Він також широко використовується в стандартних операційних середовищах через його безоплатну ціноутворення та відмінну міжплатформенну підтримку. wolfSSL підтримує галузеві стандарти до поточних TLS 1.3 і DTLS 1.2, у 20 разів менше, ніж OpenSSL, і пропонує прогресивні шифри, такі як групи ChaCha20, Curve25519, Blake2b і Post-Quantum TLS 1.3. Порівняльний аналіз і відгуки користувачів повідомляють про значно кращу продуктивність при використанні wolfSSL над OpenSSL. wolfSSL працює на основі криптографічної бібліотеки wolfCrypt. Дві версії wolfCrypt пройшли перевірку FIPS 140-2 (сертифікат №2425 і сертифікат №3389). Триває перевірка FIPS 140-3.
Запитання 1.2
Опишіть знайдену вразливість , переклавшу на українську мову розділ Description.
У wolfSSL до 5.5.2, якщо функції зворотного виклику ввімкнено (через прапор WOLFSSL_CALLBACKS), тоді зловмисний клієнт TLS 1.3 або мережевий зловмисник може ініціювати перечитування буфера в купі розміром 5 байтів. (WOLFSSL_CALLBACKS призначений лише для налагодження.)
Запитання 1.3
Наведіть фрагменти прикладів уразливого програмного коду, розглянувши розділ References to Advisories, Solutions, and Tools.
Якщо під час створення wolfSSL установлено макрос WOLFSSL_CALLBACKS, під час обробки клієнтських з’єднань TLS 1.3 виникає потенційне перечитування купи розміром 5 байтів. Це перечитування купи обмежено збірками wolfSSL, які явно встановлюють макрос WOLFSSL_CALLBACKS, ця функція не вмикається жодними іншими параметрами збірки. Макрос WOLFSSL_CALLBACKS призначений лише для налагодження, але якщо його ввімкнено у виробництві, користувачам рекомендується вимкнути WOLFSSL_CALLBACKS. Користувачам, які ввімкнули WOLFSSL_CALLBACKS, рекомендується оновити свою версію wolfSSL.
Запитання 2.1
Розшифруйте абревіатурну назву криптографічного алгоритму та режиму шифрування та вкажіть роки їх створення.
bf-cfb
Алгоритм bf:
Blowfish — це блоковий шифр із симетричним ключем, розроблений у 1993 році Брюсом Шнайєром і включений до багатьох наборів шифрів і продуктів шифрування. Blowfish забезпечує хорошу швидкість шифрування в програмному забезпеченні, і на сьогоднішній день не знайдено ефективного криптоаналізу. Однак Advanced Encryption Standard (AES) тепер отримує більше уваги, і Schneier рекомендує Twofish для сучасних програм.[3]
Шнайєр розробив Blowfish як алгоритм загального призначення, призначений як альтернатива застарілому DES і вільний від проблем і обмежень, пов’язаних з іншими алгоритмами. На момент випуску Blowfish багато інших розробок були запатентованими, обтяженими патентами або становили комерційну чи державну таємницю. Шнайер заявив, що «Blowfish не запатентований і залишиться таким у всіх країнах. Цим алгоритм розміщується у відкритому доступі та може вільно використовуватися будь-ким».
Режим шифрування: CFB
Режим зворотного зв'язку по шифротексту, режим гамування зі зворотним зв'язком (Cipher Feedback Mode, CFB) — один з варіантів використання симетричного блокового шифру, при якому для шифрування наступного блоку відкритого тексту він складається за модулем 2 з перешифрованим (блоковим шифром) результатом шифрування .
Запитання 2.2
Опишіть переваги та недоліки криптографічного алгоритму
У своїй книзі «Прикладна криптографія» [28] Брюс Шнайєр навів такі обмеження алгоритму Blowfish.
Крім того, варто відзначити і менш серйозні недоліки алгоритму:
Алгоритм Blowfish має досить серйозні переваги, зокрема:
Запитання 2.3
Опишіть переваги та недоліки режиму шифрування.
Режим шифрування зі зворотним зв'язком (CFB) замість перетворення всього блоку перетворює в шифрований текст невеликі фрагменти відкритого тексту. У цьому режимі використовується регістр зсуву довжиною в один блок, розділений на секції. Наприклад, при розмірі блоку у вісім байт і побайтовій обробці регістр зсуву розділений на вісім секцій. При спотворенні біта в зашифрованому тексті спотворюється біт відкритого тексту і руйнується регістр зсуву. Це призводить до спотворення декількох наступних фрагментів відкритого тексту до тих пір, поки спотворений біт не досягне межі регістра зсуву. Розмір порції даних зворотного зв'язку за замовчуванням може залежати від алгоритму, але зазвичай дорівнює 8 бітам або бітам у блоці. Кількість бітів зворотного зв'язку може бути змінена з допомогою властивості FeedbackSize. Алгоритми, що підтримують CFB, використовують цю властивість для налаштування зворотного зв'язку.
CFB, OFB і CTR мають дві переваги в порівнянні з режимом CBC: блоковий шифр завжди використовується тільки при шифруванні, і повідомлення не потрібно збільшувати до розміру, кратного розміру блоку шифру (хоча крадіжка шифрованого тексту також може зробити повідомлення марним).
Використання режиму CFB з частковим блоком в якості зворотного зв'язку дозволяє зменшити середню довжину циклу в 2 і більше разів. Математична модель, запропонована Девісом і Паркіном і підтверджена експериментальними результатами, показала, що тільки при наявності зворотного зв'язку може бути досягнута середня довжина циклу, близька до максимальної.
Основними її недоліками є те, що шифрування є послідовним (тобто не може бути розпаралелене), а також те, що повідомлення повинно мати розмір, кратний розміру блоку шифрування. Одним із способів вирішення цієї проблеми є метод, відомий як крадіжка шифрованого тексту. Зауважимо, що зміна в один біт відкритого тексту або ініціалізації (IV) впливає на всі наступні блоки зашифрованого тексту.
Розшифрування з неправильною ІВ призводить до того, що перший блок відкритого тексту буде пошкоджений, але наступні блоки відкритого тексту будуть правильними. Це пов'язано з тим, що кожний блок XORed з шифротекстом попереднього блоку, а не з відкритим текстом, тому немає необхідності розшифровувати попередній блок перед тим, як використовувати його в якості IV для розшифрування поточного блоку. Це означає, що блок відкритого тексту може бути відновлений з двох блоків шифрованого тексту. Як наслідок, дешифрування може бути розпаралелене. Зауважимо, що зміна одного біта в зашифрованому тексті є повною зміною відповідного блоку відкритого тексту і інвертує відповідні біти в блоці відкритого тексту, але залишає інші блоки недоторканими. Ця особливість використовується в різних атаках на оракул з підстановкою, таких як POODLE.
Системи явної ініціалізації використовують цю властивість, додаючи до відкритого тексту один випадковий блок. Шифрування виконується як зазвичай, за винятком того, що IV не потрібно виконувати розшифровку. Незалежно від того, що використовується для дешифрування ІВ, "зіпсованим" виявляється тільки випадковий блок. Його можна спокійно відкинути, а решта розшифровки буде вихідним відкритим текстом.