vyvchy
    Теми розділу

    11 · Security для QA

    Криптографія і транспорт для QA

    Зміст

    Тестувальник криптографію не пише — і саме тому найдорожчі знахідки тут не математичні, а конфігураційні. «Рядок у базі схожий на хеш», «сайт відкривається по HTTPS», «сертифікат валідний» — три вердикти, які самі собою не доводять нічого. Перший часто виявляється , який розкодовує сама браузера; другий не каже ні про версію протоколу, ні про (cipher suite); третій завжди означає «валідний щодо конкретного набору якорів довіри».

    Механіка самого каналу — , , прапорці клієнтів — живе у главі HTTPS, TLS і безпека; власна вага цієї глави — версії, набори шифрів, валідація сертифіката й межа «спокій проти руху». Пароль як предмет вимог і лишається у главі Автентифікація: атаки й тестування — тут лише механіка хешування.

    Хешування, шифрування, кодування

    Три операції плутають тому, що всі «змінюють вигляд даних». Розрізняє їх не сила, а ключ і оборотність.

    (hash function) бере вхід змінної довжини й дає вихід фіксованої — (digest); ключа не потребує, і головна її властивість — однобічність: маючи вихід, відтворити вхід має бути непрактично. Шифрування працює з ключем і має обернену операцію: у той самий ключ виконує операцію та обернену до неї, в асиметричному є пара, де публічний ключ може знати будь-хто, а приватний контролює лише власник. Base64 — схема кодування «двійкове → текст», щоб пронести двійкові дані каналом, який тримає лише ASCII: ключа немає, розкодовує сам браузер функцією atob(), обсяг зростає приблизно на третину, а URL-safe варіант опускає доповнення й замінює + і / на - та _.

    ОпераціяКлючОборотністьРоль
    Хешуваннянемаєоднобічна за задумомпідписи, MAC, зберігання паролів
    Шифруванняєобернена операція існуєконфіденційність
    Кодуваннянемаєрозкодовує будь-хтотранспорт двійкових даних

    Не кожен хеш криптографічний: для цього потрібні чотири властивості разом — швидкість, однобічність, чутливість до будь-якої зміни входу й стійкість до колізій. Найуживаніша родина — SHA-2, і члени її звуться «SHA-» плюс довжина дайджесту в бітах: SHA-256, SHA-512. SHA-1 більше не вважається безпечним, MD5 названо небезпечним. У браузері це пробується руками: SubtleCrypto.digest() рахує дайджест і приймає SHA-1 попри попередження про його , а автентичності голий хеш не дає — для (message authentication code, MAC) є окремий SubtleCrypto.sign(). І готовий чек: Web Crypto API доступний лише в захищеному контексті.

    // Playwright: на http-сторінці буде 'undefined'
    const subtle = await page.evaluate(() => typeof crypto.subtle);
    expect(subtle).toBe('object');

    Найпряміша перевірка коштує пʼять секунд: якщо рядок розкодовується atob() у консолі без жодного ключа — це кодування, а не шифрування. І дзеркальне правило: розділ «Custom Algorithms» шпаргалки OWASP складається з однієї відповіді — «Don't do this.»

    «MD5 зламано» — і саме тут плутають, що саме

    Алгоритми дайджесту проєктують так, щоб дати три різні стійкості: до колізій, до прообразу й до другого прообразу. Ламаються вони окремо.

    Зламані в MD5 саме колізії, і практично: колізія знаходиться приблизно за хвилину на звичайному ноутбуці, а за іншим результатом — за десять секунд або менше, і успішно застосували до сертифікатів X.509. Стійкість до прообразу при цьому тримається: складність 2^123.4 названа все ще доволі високою. Тобто «MD5 зламано» означає «знаходять два різні входи з однаковим хешем», а не «з хеша дістають вхід».

    Звідси вердикт із межею: вживати MD5 там, де потрібна стійкість до колізій, нерозважливо, але там, де контрольна сума стоїть у протоколі виключно проти випадкових помилок, це лишається прийнятним. Контрольна сума артефакту збірки — не знахідка; MD5 у підписі чи сертифікаті — знахідка. Заміни названо поіменно: HMAC-SHA256 або AES-CMAC; сам HMAC-MD5 практично вразливим не визнано, тож із наявних протоколів його не виривають, але в нову схему включати не можна. І готове питання до архітектора: застосунок, що вживає MD5 хоч для чого, зобовʼязаний явно назвати очікувані від цього властивості безпеки.

    Межа документа важлива: він про колізії й HMAC, а не про . Підстава «швидкий хеш не годиться саме для паролів» — інший аргумент з іншого джерела, і його дім — глава Автентифікація: атаки й тестування. Виводити «MD5 непридатний для паролів» із колізійної атаки не можна.

    Зберігання паролів: сіль, memory-hard і три важелі

    Точка старту однозначна: паролі не зберігають оборотним шифруванням — для них беруть захищені алгоритми (password hashing).

    (salt) — випадкові дані, які додають до пароля перед хешуванням, тож хеш рахується від пари «пароль плюс сіль». Ламає вона наперед пораховані таблиці, зокрема райдужні, — і саме тому, що пошук по таблиці дешевий. Деталь, яку часто перевертають: сіль не є секретом і зберігається поруч із солоним хешем у тій самій базі. З боку алгоритму це окремий вхід: рекомендовано 16 байтів, унікальних для кожного пароля; 128 бітів достатньо для всіх застосувань і лише за браком місця скорочуються до 64.

    Memory-hard означає, що платить не тільки часом. Argon2 цілить у найвищу швидкість заповнення памʼяті, водночас захищаючись від атак із компромісом «час проти памʼяті» — нарощування обчислювальних блоків перебір не здешевлює. Варіантів три: Argon2d ходить по памʼяті залежно від даних, Argon2i — незалежно й тому кращий для паролів, — гібрид, перша половина першого проходу як Argon2i, решта як Argon2d. Нормативно реалізація зобовʼязана підтримувати Argon2id, і правило вибору записане прямо: не знаєте різниці або вважаєте атаки по сторонніх каналах реальною — беріть Argon2id. Важелів у конфігурації три: p — ступінь паралелізму, m — обсяг памʼяті в кібібайтах (не менше 8*p), t — кількість проходів, якою час підкручують незалежно від памʼяті; підбирають емпірично — максимальне t, за якого час ще вкладається в бюджет.

    Числа, які не можна звести в одне. RFC 9106 називає першою рекомендацією Argon2id з t=1, p=4, m=2^21 (2 GiB памʼяті), 128-бітною сіллю й 256-бітним тегом і зве це дефолтом для всіх середовищ; другою — t=3, p=4, m=2^16 (64 MiB) для середовищ із дефіцитом памʼяті. Шпаргалка OWASP Password Storage вимагає мінімуму: Argon2id, 19 MiB, дві ітерації, один ступінь паралелізму. Різниця на порядок — і це не помилка: RFC дає рівномірно безпечний дефолт під власне залізо, шпаргалка — нижню планку. Обидва джерела канонічні у своїй темі, тож чесна відповідь називає обидва набори з атрибуцією, а не одне число.

    Категорія A04 з перелічує прийнятне зі свого боку: адаптивні солоні хеш-функції з — Argon2, yescrypt, scrypt або PBKDF2-HMAC-SHA-512; шпаргалка Password Storage додає bcrypt, але лише для легасі-систем. Що з цього перевіряє QA без доступу до криптографії: однакові хеші в дампі означають відсутність солі; «ми зберігаємо зашифрований пароль» — знахідка, а не синонім хешування; а якщо автентифікація відповідає миттєво при заявленому Argon2id з двома гігабайтами памʼяті, щось одне з двох неправда.

    Транспорт: версії протоколу й набори шифрів

    «Увімкнули TLS» — не відповідь: заборони формулюються поверсійно, і кожну ухвалював окремий документ.

    ЩоМодальність джерелаДокумент
    TLS 1.0 і TLS 1.1вживати заборонено; узгодження з будь-якої версії не дозволяєтьсяRFC 8996
    SSL 3.0вживати заборонено; узгодження з будь-якої версії не дозволяєтьсяRFC 7568
    SSL 2.0клієнт не заявляє версію нижчу за 0x0300; сервер такою версією не відповідає й обриває зʼєднанняRFC 6176

    Підстави названі, і це не «воно старе». У TLS 1.0/1.1 цілісність рукостискання й підписи автентифікації тримаються на SHA-1, (downgrade attack) коштує 2^77 операцій — значно нижче за прийнятний сучасний запас, — а сильніший хеш у цих версіях не вибирається, тож єдиний шлях оновлення — новіша версія; окремо названо й відсутність (authenticated encryption with associated data), якого до TLS 1.2 не було взагалі. У SSL 3.0 недетерміноване доповнення в конструкції CBC тривіально дозволяє відновити відкритий текст, а потоковий шифр не рятує: у широкому вжитку лише RC4 із серйозними зміщеннями. У SSL 2.0 повідомлення рукостискання не захищені взагалі, тож легко змушує клієнта вибрати слабший набір шифрів.

    Дві тонкощі, які губить будь-який переказ. Перша: заборонено узгодити — не те саме, що заборонено розпізнати; сервер приймає будь-яке значення виду 03,XX як номер версії на рівні записів, але узгоджувати SSLv3 йому заборонено, і старий клієнт дістає алерт protocol_version і розрив, а не тиху деградацію. Друга: у TLS 1.3 версія узгоджується списком у розширенні supported_versions, а ServerHello.legacy_version сервер зобовʼязаний виставити в 0x0303 — поле в дампі показує 1.2, коли узгоджено 1.3. Від зниження TLS 1.3 захищається маркером в останніх 8 байтах свого випадкового значення: клієнт зобовʼязаний перевірити його й при збігу обірвати рукостискання алертом illegal_parameter, а з боку конфігурації те саме закриває TLS_FALLBACK_SCSV.

    Чинна конфігурація за шпаргалкою OWASP: за замовчуванням TLS 1.3, TLS 1.2 — лише для сумісності; TLS 1.0 і 1.1 формально застарілі за RFC 8996 (березень 2021), заборонені PCI DSS і прибрані з основних браузерів; SSLv2 і SSLv3 вимкнені завжди. Старого клієнта, якщо він справді потрібен бізнесу, ізолюють на окремому без доступу до чутливих даних — основний не послаблюють.

    Версія — половина відповіді: наборів шифрів багато, і вони дають різний рівень захисту. Вмикають автентифіковані режими — для TLS 1.3 стандартні AEAD-набори (AES-GCM або ChaCha20-Poly1305), для TLS 1.2 теж AEAD і без CBC: вони дають цілісність і автентичність на додачу до конфіденційності, і GCM та CCM беруть у першу чергу. Вимикають поіменно: null-шифри, анонімні TLS_*_anon_*, експортні TLS_*_EXPORT_*, транспорт RSA TLS_RSA_* і узгодження Діффі — Гелмана TLS_DH_* та TLS_ECDH_*, які не дають прямої секретності (perfect forward secrecy). Дві заборони TLS 1.3 діють для будь-якої версії й із будь-якої причини: не пропонувати й не узгоджувати ні RC4, ні шифри, стійкість яких нижча за 112 бітів. У самому TLS 1.3 вбудована у версію — статичні набори RSA і Діффі — Гелмана з нього прибрані. Окремо вимикають стиснення TLS: вразливість CRIME дозволяє відновити чутливу інформацію, зокрема сесійні cookie.

    Перевіряють це інструментом, а не оком — онлайн (SSL Labs Server Test) або офлайн (testssl.sh), — і знахідкою є будь-який заборонений набір у виводі. Типова : «підняли сумісність зі старим клієнтом», після чого слабкі набори повертаються тихо.

    Валідація сертифіката: пʼять різних причин однієї помилки

    (certification path validation) доводить звʼязок між іменем субʼєкта й його відкритим ключем. Ланцюг потрібен тому, що користувач відкритого ключа початково має лише обмежену кількість надійних ключів центрів сертифікації, і дійсний шлях починається з сертифіката, виданого якорем довіри (trust anchor). Вибір якоря — питання політики, тож «сертифікат валідний» завжди означає «валідний щодо конкретного набору якорів»; звідси й різна поведінка того самого стенду в браузері та в CI-агенті.

    Кожен сертифікат у ланцюзі мусить задовольняти чотири умови: підпис перевіряється робочим відкритим ключем, поточний час входить у період дії, сертифікат не відкликано, імʼя видавця збігається з очікуваним. Плюс відсікач: клієнт зобовʼязаний відхилити сертифікат із непідтримуваним критичним розширенням — це , а не попередження.

    ні

    так

    ні

    так

    ні

    так

    ні

    так

    ні

    так

    Сертифікат у ланцюзі

    Підпис перевіряється
    ключем видавця?

    Відмова

    Час у межах
    notBefore..notAfter?

    Немає у CRL?

    Імʼя видавця
    очікуване?

    Шлях до якоря довіри складено

    Показаний ідентифікатор
    збігається з очікуваним?

    Сервер автентифіковано

    ні

    так

    ні

    так

    ні

    так

    ні

    так

    ні

    так

    Сертифікат у ланцюзі

    Підпис перевіряється
    ключем видавця?

    Відмова

    Час у межах
    notBefore..notAfter?

    Немає у CRL?

    Імʼя видавця
    очікуване?

    Шлях до якоря довіри складено

    Показаний ідентифікатор
    збігається з очікуваним?

    Сервер автентифіковано

    Період дії — це зобовʼязання центру сертифікації підтримувати інформацію про статус сертифіката, а не «термін придатності файлу», і межі його включні. Відкликання перевіряють по списку відкликаних сертифікатів (certificate revocation list, CRL) — він підписаний центром, має мітку часу й лежить у відкритому репозиторії, — і тут же межа механізму: часова роздільність відкликання обмежена періодом випуску CRL, саме тому відкликаний сертифікат ще якийсь час працює.

    Імʼя звіряється з двох боків: клієнт має (reference identifier), сервер показує показаний (presented identifier). Дивитися треба в розширення subjectAltName, поле dNSName; рядки, схожі на доменні імена, у Common Name не включають і не перевіряють, а сучасні версії Chrome CN просто ігнорують. Порівняння нечутливе до регістру, але кожен лейбл має збігтися. Для дві дослівні вимоги: символ підстановки рівно один і він займає крайній лівий лейбл цілком; покриває він рівно один лейбл, тож *.staging.example.com не покриває a.b.staging.example.com, а ще й ручається за будь-який однолейбловий хост у домені — це порушення принципу .

    При розбіжності автоматичний клієнт має обірвати спробу звʼязку з помилкою поганого сертифіката й записати її в лог; налаштування, яке цю поведінку вимикає, дозволено мати, але за замовчуванням увімкненим воно бути не може «ігнорувати помилки сертифіката» в тестовому є саме таким свідомим налаштуванням. Звідси проста дисципліна: помилку сертифіката розкладають, а не переказують — підпис, строк, відкликання, видавець, імʼя — пʼять причин із пʼятьма лагодженнями. Самопідписаний сертифікат на стенді — це відсутній , і лікується він внутрішнім коренем у сховищі довіри агента, а не вимиканням перевірки.

    Дані в спокої й дані в русі, і ключі до обох

    Набір алгоритмів обирають за задачею: надійно зберігати дані — під захист даних у спокої (data at rest), передавати й приймати — під захист даних у русі (data in transit). «Увімкнули HTTPS» відповідає лише за рух, «зашифрували диск» — лише за спокій.

    У спокої все починається не з алгоритму, а з моделі загроз — від кого саме ви захищаєте ці дані. Звідси й шар: шифрування на рівні заліза захищає від фізичної крадіжки сервера й не дає нічого проти віддаленої компрометації. Найдешевший захист узагалі не криптографічний: найкраще чутливу інформацію не зберігати. Числа з тієї самої шпаргалки: AES із ключем щонайменше 128 бітів (в ідеалі 256) і безпечним режимом, еліптичні криві на кшталт Curve25519 для асиметричного, а RSA — не коротше за 2048 бітів і обовʼязково з випадковим доповненням (воно ж OAEP).

    У русі транспорт дає конфіденційність, цілісність і автентифікацію — причому особу клієнта не перевіряють, поки не задіяні клієнтські сертифікати. TLS має бути на всіх сторінках: сторінка, що його не примушує, дає нагоду перехопити сесійні токени або вкинути шкідливий JavaScript у відповідь. Для API правило суворіше за редирект: суто API-ендпоінти мають вимикати HTTP узагалі, а якщо це неможливо — відмовляти запитам по нешифрованому HTTP, а не перенаправляти їх, бо до моменту редиректу запит із токеном уже пройшов відкритим каналом.

    // API-ендпоінт по http має відмовити, а не привести редиректом на https
    const res = await request.get('http://api.example.com/orders', { maxRedirects: 0 });
    expect([301, 302, 307, 308]).not.toContain(res.status());

    Ключ до обох задач — це не значення, а життєвий цикл: генерація, розподіл, знищення. Один ключ має одне призначення, бо обмеження вжитку обмежує шкоду від компрометації, і ключ шифрують ключем не слабшим за нього. Звідси конвертна схема: (DEK) шифрує дані, (KEK) шифрує DEK, і KEK зберігають окремо — зашифрований DEK можна тримати поруч із даними, але скористатися ним вийде лише в того, хто дістане ще й KEK з іншої системи.

    Де ключ лежати не може: у коді — найпряміша перевірка з усіх, робиться грепом по репозиторію; у змінних оточення — їх можна випадково розкрити через функції на кшталт phpinfo() або через файл /proc/self/environ; у відкритому вигляді — ніколи; поруч із даними, які він захищає — якщо дані в базі, ключі кладуть у файлову систему. Місце для них — криптографічне сховище: окремий апаратний модуль або ізольований криптографічний сервіс. Тут і межа з гігієною секретів у CI, яка живе в розділі про Git і CI/CD: вимоги до криптографічного ключа суворіші за звичну гігієну секретів, і змінна оточення сховищем для нього не є.

    Ще три речі для ревʼю: ротація існує до інциденту або не існує взагалі; план відновлення після компрометації має бути записаний і легко доступним; а ключі, вектори ініціалізації, ідентифікатори сесій, й токени скидання пароля мають походити з (cryptographically secure pseudo-random number generator), а не зі звичайного генератора. Готова знахідка: UUID першої версії складається з мітки часу й MAC-адреси, тобто випадковим не є, а четверта випадкова, але чи бере вона CSPRNG — залежить від реалізації, тож на випадковість UUID покладатися не варто.

    Cryptographic Failures у OWASP Top 10

    У редакції 2025 року категорія опустилася на дві позиції, до четвертої, і покриває не лише «слабку криптографію»: сюди входять брак криптографії, недостатньо сильна криптографія, витік криптографічних ключів і повʼязані помилки. Карта категорій цілком — у главі Безпека очима QA.

    Перший крок профілактики не криптографічний: дані, які застосунок обробляє, зберігає й передає, треба класифікувати й розмітити; паролі, номери платіжних карток, медичні записи, персональні дані й бізнес-таємниці потребують посиленого захисту, особливо коли підпадають під GDPR або PCI DSS. Далі: усі мають шифруватися на транспортному рівні, усі чутливі мають бути зашифровані, а в русі — тільки протоколи TLS 1.2 і вище, з прямою секретністю, без CBC-шифрів і з підтримкою квантово-стійкого обміну ключами. І рідкісний випадок, коли джерело дає дату: до постквантової криптографії радять готуватися вже зараз, щоб високоризикові системи були в безпеці не пізніше кінця 2030 року — таку дату можна класти прямо в .

    Два сценарії атаки показують обидва боки глави. Дані в русі: сайт не примушує TLS на всіх сторінках, атакувальник у ненадійній мережі знижує зʼєднання з HTTPS до HTTP і краде сесійну cookie — сесійний бік у главі Сесії та токени. Дані в спокої: база зберігає паролі несолоними або простими хешами, і всі несолоні хеші розкриваються райдужною таблицею.

    Типові помилки

    «Дані зашифровані — ось же нечитабельний рядок». Виглядає як шифрування, а насправді часто Base64: розкодовується atob() без ключа, отже ключа немає.

    «MD5 зламано, отже з хеша дістануть пароль». Виглядає як логічний висновок, а насправді зламано колізії, тоді як стійкість до прообразу тримається.

    «Пароль зберігається у вигляді хешу». Виглядає як відповідь, а насправді питання в тому, чи є сіль і фактор роботи. Сюди ж «сіль треба заховати» — перевернуте правило: сіль секретом не є, ховають ключі.

    «Сайт по HTTPS — транспорт закрито». Виглядає як закритий пункт, а насправді це три різні перевірки: усі сторінки, версія й набір шифрів. І дамп тут бреше: сервер, що узгодив TLS 1.3, виставляє в ServerHello версію 1.2.

    «Сертифікат валідний — браузер не лається». Виглядає як вердикт, а насправді валідність рахується щодо конкретного набору якорів довіри. Сюди ж «є wildcard, отже всі піддомени покриті»: підстановка покриває рівно один лейбл.

    «Диск зашифровано, дані захищені». Виглядає як , а насправді це захист від фізичної крадіжки сервера, який нічого не дає проти віддаленої компрометації.

    Підсумок

    1. Ключ і оборотність розводять три операції. Хешування — без ключа й однобічне, шифрування — з ключем і оборотне, кодування — без ключа й розкодовується будь-ким.
    2. «MD5 зламано» — про колізії. Стійкість до прообразу тримається, контрольна сума проти випадкових помилок лишається прийнятною, підпис і сертифікат — ні.
    3. Пароль не шифрують, а хешують із сіллю й фактором роботи. Сіль унікальна на пароль і не є секретом; числа RFC 9106 і мінімум OWASP різняться на порядок, і зводити їх в одне не можна.
    4. Транспорт перевіряється трьома питаннями: яка версія узгоджується, який набір шифрів узгоджується і що показує сертифікат.
    5. Помилку сертифіката розкладають на пʼять причин — підпис, строк, відкликання, видавець, імʼя — а вимкнення перевірки лагодженням не є.
    6. Спокій і рух — окремі задачі, і ключ до обох є життєвим циклом, а не значенням у змінній: не в коді, не у змінній оточення, не поруч із даними.

    Можливі питання

    «Чим хешування відрізняється від шифрування й кодування?» Дивляться, чи назвете ви критерій, а не приклади: ключ і оборотність, плюс перевірка — Base64 розкодовує сам браузер.

    «Чому не можна вживати MD5?» Питання-фільтр на точність. Очікують «зламано колізії», а не «з хеша дістають вхід», і бонусом — межу: контрольна сума проти випадкових помилок прийнятна, підпис і сертифікат — ні.

    «Як правильно зберігати паролі й навіщо сіль?» Слухають три речі разом: не шифрування, а хешування; унікальна сіль на кожен пароль; повільний алгоритм із фактором роботи.

    «Які версії TLS прийнятні і що ви перевірите, крім версії?» Хочуть підстави: SHA-1 і вартість атаки зниження 2^77 для TLS 1.0/1.1, конструкція CBC для SSL 3.0. Далі — набори шифрів: увімкнені автентифіковані режими, вимкнені null-, анонімні, експортні, RC4 і набори без прямої секретності.

    «Що означає “сертифікат валідний” і чому не можна вимкнути перевірку в автотестах?» Тут перевіряють обережність формулювань: пʼять перевірок, валідність відносна до набору якорів довіри, а налаштування дозволено мати, але не за замовчуванням.

    «Де зберігати ключі шифрування?» Питання на клас вимог: не в коді, не у змінній оточення, не поруч із даними, ротація готується до інциденту. Слабку відповідь видає «поклали в секрети CI» без різниці між секретом і криптографічним ключем.

    «Що входить у Cryptographic Failures із OWASP Top 10?» Хочуть почути, що це не лише «слабкий шифр»: брак криптографії, недостатньо сильна криптографія й витік ключів — той самий .

    Джерела

    Хешування, шифрування, кодування

    «MD5 зламано» — і саме тут плутають, що саме

    Зберігання паролів: сіль, memory-hard і три важелі

    Транспорт: версії протоколу й набори шифрів

    Валідація сертифіката: пʼять різних причин однієї помилки

    Дані в спокої й дані в русі, і ключі до обох

    • OWASP Cheat Sheet — Key Management — вибір алгоритмів під спокій або рух, життєвий цикл ключа, одне призначення, криптографічне сховище, план відновлення.
    • OWASP Cheat Sheet — Cryptographic Storage — модель загроз перед алгоритмом, межа шифрування на рівні заліза, AES і RSA числами, OAEP, DEK і KEK, ключі не в коді й не у змінних оточення, ротація, CSPRNG і ненадійність UUID.
    • OWASP Cheat Sheet — Transport Layer Security — властивості транспорту, TLS на всіх сторінках, відмова замість редиректу для API.

    Cryptographic Failures у OWASP Top 10

    • OWASP Top 10:2025 — Cryptographic Failures — обсяг категорії й нова позиція, класифікація даних, вимоги до шифрування, дедлайн постквантової криптографії, два сценарії атаки.

    Пояснення

    «Поясни» працює з власним API-ключем Anthropic: запит іде з вашого браузера прямо до Anthropic.

    Свій API-ключ (BYOK)

    Вставте власний ключ Anthropic — пояснення працюватиме на реальній моделі. Ключ зберігається лише у вашому браузері (localStorage), нікуди не надсилається, крім api.anthropic.com, і не логується.