Аналіз проблеми валідації підпису у протоколі WebAuthn/Passkey за допомогою C#

Аналіз проблеми валідації підпису у протоколі WebAuthn/Passkey за допомогою C#

4 Березня 2024 в 13:15 35

При розробці програмного забезпечення, що використовує протокол WebAuthn/Passkey, важливою є коректна валідація підпису. У цій статті ми розглянемо проблему, що може виникнути під час валідації підпису, створеного протоколом WebAuthn/Passkey за допомогою мови програмування C#.

Спочатку розглянемо код, в якому відбувається валідація підпису. У ньому використовуються різні перевірки наявності необхідних даних, зокрема Id, AuthenticatorData, ClientDataJSON та Signature. Далі проводиться перевірка клієнта та розшифрування публічного ключа. Потім дані для перевірки формуються згідно з протоколом, а сама перевірка виконується з використанням ECDsa.VerifyData().

Одним із можливих причин невдачі валідації підпису може бути неправильне перетворення з ASN.1 формату. У коді реалізовано метод convertFromASN1, який відповідає за перетворення підпису. Проте помилки в цьому методі можуть призвести до некоректної валідації.

Додатково, важливо врахувати, що проблема може бути пов’язана із зміною алгоритму хешування. У даному випадку використовується SHA256, проте можливі зміни у протоколі, які можуть вплинути на валідацію підпису.

Щоб з’ясувати причину невдачі валідації підпису, користувач проводить аналіз двох різних варіантів підпису. Перший варіант не пройшов успішно, в той час як другий – так. Це дає можливість порівняти дані та з’ясувати, в чому може бути причина проблеми.

У результатах аналізу видно, що проблема може бути пов’язана з тимімером або передачею даних. Однак, для точного визначення причини проблеми може знадобитися додаткове тестування та аналіз.

У випадку невдачі валідації підпису, рекомендується перевірити правильність перетворення з ASN.1 формату, коректність використання алгоритму хешування та можливі проблеми з тимінгом або передачею даних.