AES256 шифрование и дешифрование в ASP - PullRequest
1 голос
/ 05 октября 2011

Мне нужно отправить имя пользователя и пароль из приложения iphone на страницу сервера ASP, и я зашифрую их, используя: http://iphonedevelopment.blogspot.com/2009/02/strong-encryption-for-cocoa-cocoa-touch.html. Как лучше всего расшифровать эти строки на странице ASP?Я нашел несколько примеров, но поскольку шифрование будет происходить с двух совершенно не связанных сторон, я думаю, что мне нужно жестко закодировать ключ с обеих сторон, и я не могу найти примеров, в которых не используются сгенерированные ключи.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Да, управление ключами - большая проблема. Вам нужно будет иметь ключи с обеих сторон, на iOS вы можете сохранить ключ в связке ключей, это безопасно, но процесс, чтобы получить его там безопасно, сложнее.

Другой основной проблемой является получение одинаковых параметров с обеих сторон. Особый интерес представляют

  1. значение и размер ключа шифрования
  2. режим: CBC, ECB и т. Д. (Вероятно, вы должны использовать CBC)
  3. вектор инициализации (iv) необходим для большинства режимов
  4. метод заполнения: PKCS7 и т. Д. (AES является блочным шифром и требует ввода в кратном размере блока)
0 голосов
/ 06 октября 2011

Почему бы не сохранить пароли в базе данных с SHA1, а затем использовать HMAC с указанным клиентом ключом для связи?

Пусть сервер сгенерирует случайный ключ и отправит его вместе с запросом на вход в систему.Клиент вычисляет хэш SHA1 пароля, а затем вычисляет хеш HMAC SHA1, используя ключ, указанный сервером.Затем сервер проверяет, что результат верен.

На стороне клиента:

// password is the plaintext password
// keyb64 is a random key specified by the server, encoded in base64.
string ComputeSecureHash(string password, string keyb64)
{
    byte[] data = Encoding.UTF8.GetBytes(password);
    byte[] key = Convert.FromBase64String(keyb64);
    byte[] hash;
    byte[] machash;
    // compute a plain SHA1 hash of the specified data
    using (SHA1Managed sha1 = new SHA1Managed())
    {
        hash = sha1.ComputeHash(data);
    }
    // now compute a HMAC hash of that hash, using the random key.
    using (HMACSHA1 sha1mac = new HMACSHA1(key))
    {
        machash = sha1mac.ComputeHash(hash);
    }
    return Convert.ToBase64String(machash);
}

На стороне сервера:

// hash is the string produced by the function above
// realHash is the SHA1 hash of the real password, which you've fetched from the db
// key is the key you generated for this login session
bool VerifyHash(string hash, byte[] realHash, byte[] key)
{
    byte[] machash;
    using (HMACSHA1 sha1mac = new HMACSHA1(key))
    {
        machash = sha1mac.ComputeHash(realHash);
    }
    return (Convert.ToBase64String(machash) == hash);
}

Это позволяет вам проходить аутентификациюоткрытый текст без взлома пароля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...