2010-09-12 5 views
2

Кто-нибудь знает, где я могу найти пример кода для этого с помощью пространства имен system.security.cryptography - или инструкций, которые последует за разработчиком?Как вы можете создать OTP с помощью system.security.cryptography, которая может быть аутентифицирована на клиенте?

Цель состоит в том, чтобы добавить двухфакторную аутентификацию на сайт asp.net. На веб-сайте я хочу попросить пользователя ввести код доступа (аналогично тому, как он получил его из брелока). На стороне клиента я хочу предоставить программу vb.net windows.forms, которая генерирует правильный пароль.

Я хочу сделать это с пространством имен system.security.cryptography в небольшом масштабе. Я искал образец кода. Я не хочу возиться с устройствами или покупать устройства для проверки подлинности.

Большинство алгоритмов там требуют углубленной математической подготовки или предназначены для других платформ, таких как Linux или PHP. Я ищу эквивалент .net.

+0

Зачем вам это нужно? Я думаю, что может быть лучшее решение, и если вы предоставите больше информации, вы можете обеспечить лучшую безопасность и решение. –

+0

Чтобы добавить двухфакторную аутентификацию на сайт asp.net. На веб-сайте я хочу попросить пользователя ввести код доступа (аналогично тому, как он получил его из брелока). На стороне клиента я хочу предоставить программу vb.net windows.forms, которая генерирует правильный пароль. Я хочу сделать это с помощью пространства имен system.security.cryptography. Был поиск образца кода. – pghcpa

ответ

1

Криптографические части RFC4226 (счетчик на основе OTP) или draft-mraihi-totp-timebased (на основе времени ОТП) относительно просты:

  1. Генерация HMAC на основе совместно используемый ключ и/счетчика времени
  2. Усереть это безопасным способом

Обычно управление пользователем и статическая/динамическая синхронизация осложняют его.

Что-то, как это должно работать:

public static int CalculateHotp(byte[] key, byte[] counter) 
{ 
    var hmacsha1 = new HMACSHA1(key); 
    byte[] hmac_result = hmacsha1.ComputeHash(counter); 
    int offset = hmac_result[19] & 0x0f; 
    int bin_code = (hmac_result[offset] & 0x7f) << 24 
        | (hmac_result[offset+1] & 0xff) << 16 
        | (hmac_result[offset+2] & 0xff) << 8 
        | (hmac_result[offset+3] & 0xff); 
    int hotp = bin_code % 1000000; 
    return hotp; 
} 
+0

Спасибо, но как вы это делаете в .NET с помощью system.security.cryptography? – pghcpa

+0

pghcpa: взгляните на эту [ссылку] (http://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha1.aspx) – pistipanko

 Смежные вопросы

  • Нет связанных вопросов^_^