Я работаю на большом сайте. Мы планируем использовать токены аутентификации, которые должны быть проверены большим количеством приложений, но выданы приложением авторизации. Я рассматриваю асимметричные, а не симметричные схемы подписи, чтобы избежать сохранения секретности на большом количестве серверов приложений.
Я составил список подходящих алгоритмов - dsa, ecdsa, rsa, для которых в Java есть криптографические провайдеры.
Сравнение DSA и RSA:
У dsa есть подпись, которая не зависит от силы ключа и намного меньше, чем подпись rsa для эквивалентной безопасности (rsa 1024/1568 против dsa 192). Однако проверка dsa (ожидайте, что вызовы проверки будут 100-кратной проблемой) примерно в 10 раз медленнее, чем проверка rsa. dsa192 может использовать просто sha1 для дайджеста, который может быть нарушен, хотя я думаю, что я мог бы использовать Sha234 и обрезать вывод до 192 бит.
Обзор dsa против rsa также выявил другие эзотерические проблемы - секретность секретного ключа в dsa очень зависит от того, насколько случайным является параметр k, dsa не поддерживает хэши с брандмауэрами, что для нас не проблема.
Сравнение ecdsa и dsa - ecdsa немного быстрее подписывает и проверяет, и я видел утверждение, что с ecdsa мы уверены, что подпись проверит (небольшое беспокойство здесь). Размер подписи такой же и не входит в картинку.
Так как токены отправляются с каждым запросом, и мы говорим о 40 против 128/196 байтов до кодирования, я думаю о переходе на ecdsa-192 с sha2, урезанным до 192 битов - я думаю, что стоимость 10x является неудачной, но, надеюсь, преобладают затраты ввода / вывода.
Ценю обратную связь. Дайте мне знать, что я пропустил.