Криптография является одной из немногих предметных областей, с которой рано или поздно сталкивается подавляющее большинство разработчиков. Вам уже доводилось использовать генераторы случайных чисел, работать с цифровыми подписями, хранить пользовательские пароли или, на худой конец, шифровать данные? А вы уверены, что не допустили при этом ошибок, повлиявших на защищенность приложения? Проверьте себя: сколько уязвимостей вы видите в следующем фрагменте кода?
private static bool IsValidSignature(string data, string signature) {
var bytes = Encoding.ASCII.GetBytes("eCTR4rhYQVNwn78j" + data);
var hash = MD5.Create().ComputeHash(bytes);
return BitConverter.ToString(hash) == signature;
}
...
if (IsValidSignature(Request["data"], Request["signature"])) {
var decryptor = Aes.Create() {
BlockSize = 128;
Key = Encoding.ASCII.GetBytes("YtGDn6mvAHbp5X7C");
IV = Encoding.ASCII.GetBytes("mHMUYSjiVxo4wp9R");
}.CreateDecryptor();
}
Если меньше 5, то вам определенно стоит посетить этот доклад. На нем, без лишнего математического хардкора, мы поговорим о типичных сценариях использования средств криптографии в .NET-приложениях, рассмотрим лучшие практики решения наиболее часто встречающихся задач, разберем типовые уязвимости и посмотрим демки нескольких реальных атак на наиболее интересные из них.
Тимлид проекта разработки анализатора защищенности кода PT Application Inspector, C#-разработчик, AppSec-исследователь.