Внимание: Mt.Gox, TradeHill, MyBitCoin, и все другие услуги Bitcoin!
Вот идея для простого способа добавить опциональные Аутентификация 2-фактор для входа в систему.
Двухфакторная аутентификация является более безопасным способом предоставления доступа к учетной записи пользователя. Он использует два отдельных канала для того, чтобы пользователь, который они говорят, что они есть. Как правило, он использует что-то, что они знают (например, пароль), и что-то у них есть (вроде брелока RSA). Проблема с брелоками в том, что вы должны платить за аппаратный гаджет третьих сторон, и распространять их среди пользователей, которые получают осложненные.
Простая альтернатива я предлагаю это: разрешить пользователю возможность использовать аутентификацию 2-фактор, основанный на 260-символа "Passcard" что пользователь предоставляет, который затем используется при входе в систему, чтобы выдать идентификацию PIN-запрос-ответ.
https://secure.wikimedia.org/wikipedia/en/wiki/Two-factor_authentication
https://secure.wikimedia.org/wikipedia/en/wiki/Challenge_response
Вот как это работает.
(1) Для того, чтобы настроить мой 2-фактор вход, я посылаю вам строку из 260 символов, чтобы быть истолкована как Пасскарты с 10 рядов (0-9) и 26 столбцов (A-Z). Вы сохраняете, что безопасно, как вы (надеюсь) с паролями. Эта Passcard информация передается только один раз, когда я настройки 2-фактор входа (так же, как установка пароля).
(2) Теперь каждый раз, когда я войти в систему, включить запрос на 4-значного PIN-кода, начиная с определенной строки и столбца (генерируется случайным образом). Например:
Код:
Идентификатор пользователя: ____________________
Пароль: ____________________
PIN-код на 4В: ____
Пароль: ____________________
PIN-код на 4В: ____
Ключевой момент здесь является то, что хакер (скажем, гипотетический, в Гонконге) не будет иметь доступа к моей Пасскарте, и не может войти, как если бы они были мной, даже если они взломали мой пароль. [Дополнительный бонус: убивает ботов мертвых. Нет необходимости раздражающей капчи, если они выбравшие 2-фактор входа в системе.]
Со своей стороны, я могу создать свой 260-символа Пасскарта любым способом, я хочу. Например, я могу использовать код Python ниже, чтобы преобразовать сильный пароль в Passcard блок (возможно, на другом компьютере, просто быть очень безопасно). Теперь я могу распечатать Пасскарта, положить его в моем бумажнике, и стереть все следы его создания. Если я когда-либо потерять карту, я могу легко воссоздать его из ключевой фразы. (Python использует алгоритм Мерсенна Twister ГСЧ, поэтому он всегда будет генерировать ту же последовательность из данного семени).
Или, если используется этот кусок бумаги слишком громоздкий для меня, я мог бы решить иметь .jpg изображение Пасскарты на моем телефоне, или любой другой эталонный метод я комфортно. [Или, если я не слишком обеспокоен кто-то набирает полный доступ к моему компьютеру, я мог бы даже на моем рабочем столе, или менеджер паролей, который отвечает на PIN-вызов-ответ для меня.]
Код:
код Python и пример:
# Генератор аутентификации Passcard два-фактора Виктора
# (С) авторское право: Виктор Иган, 1EWD8L6ujFQMDiDn8Se9SP9A4yaxwpbRks
от случайного импорта randint, семян
символы = «23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ @ # $%&*<>+ {} [] () /?
Защиту generate_passcard (ключевая фраза, символы):
"""Генерирование Passcard блока 260 символов для данной ключевой фразы"""
Passcard = ''
Семя (ключевая фраза)
для г в диапазоне (260):
S = символы [randint (0, LEN (символы) - 1)]
Пасскарта + = ы
возвращение Passcard
Защиту print_passcard (Passcard):
"""Распечатать данную 260-символьный Пасскарта"""
печать '\ nPasscard блок:', Passcard
Распечатать
печать «АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ»
Распечатать '----------------------------'
cardlist = список (Passcard)
для г в диапазоне (10):
строка = «»
для J в диапазоне (26):
линия + = cardlist.pop (0)
печать я, линия
Распечатать
вернуть
# Генератор аутентификации Passcard два-фактора Виктора
# (С) авторское право: Виктор Иган, 1EWD8L6ujFQMDiDn8Se9SP9A4yaxwpbRks
от случайного импорта randint, семян
символы = «23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ @ # $%&*<>+ {} [] () /?
Защиту generate_passcard (ключевая фраза, символы):
"""Генерирование Passcard блока 260 символов для данной ключевой фразы"""
Passcard = ''
Семя (ключевая фраза)
для г в диапазоне (260):
S = символы [randint (0, LEN (символы) - 1)]
Пасскарта + = ы
возвращение Passcard
Защиту print_passcard (Passcard):
"""Распечатать данную 260-символьный Пасскарта"""
печать '\ nPasscard блок:', Passcard
Распечатать
печать «АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ»
Распечатать '----------------------------'
cardlist = список (Passcard)
для г в диапазоне (10):
строка = «»
для J в диапазоне (26):
линия + = cardlist.pop (0)
печать я, линия
Распечатать
вернуть
Код:
Примечание: это не очень хорошая ключевая фраза, это просто используется в качестве примера.
>>> PassPhrase = "Roger Roger, у вас есть свободное пространство Кларенс, что ваш вектор Виктор?"
>>> Passcard = generate_passcard (ключевая фраза, символы)
>>> print_passcard (Пасскарта)
Пасскарта блок:? Sl # tyHqrY4b + MW + ВУ [вар [GpQHKaVz3eza3m4 # zWJfPBXU) уш [W7Bj] V% s48GSLP + 2YeN4eJa) fWPg PAGQByWhTgXWkc # б * Vav>/ 9a9W * и $ # TR&A9zq (xPzVN2tfxpk8sz # кИ + CN + GbyDqm&Y # Y% a6RTxv5? GQP {yYMZaZB?+ /&Lb8r8Lj} ч * DcBVk (? 738Nru (/>XsBB2pw>errsEzXKAdRMcd
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ
----------------------------
0 С.Л. # tyHqrY4b + мвт + VU [вар [GpQH
1 KaVz3eza3m4 # zWJfPBXU) уш [W7
2 Bj] V% s48GSLP? + 2YeN4eJa) FWP
3 г? PAGQByWhTgXWkc # б * Vav>/ 9a
4 9W * и $ # TR&A9zq (xPzVN2tfxpk8
5 SZ # кА + CN + GbyDqm&Y # Y% a6RTx<
6 Ezs8 #) 7 + frvy}) sUZkrFxBH + КН
7 9k4EU9u>v5? GQP {yYMZaZB? 8 >+ /&Lb8r8Lj} ч * DcBVk (? 738Nr
9 и (/>XsBB2pw>errsEzXKAdRMcd
>>> PassPhrase = "Roger Roger, у вас есть свободное пространство Кларенс, что ваш вектор Виктор?"
>>> Passcard = generate_passcard (ключевая фраза, символы)
>>> print_passcard (Пасскарта)
Пасскарта блок:? Sl # tyHqrY4b + MW + ВУ [вар [GpQHKaVz3eza3m4 # zWJfPBXU) уш [W7Bj] V% s48GSLP + 2YeN4eJa) fWPg PAGQByWhTgXWkc # б * Vav>/ 9a9W * и $ # TR&A9zq (xPzVN2tfxpk8sz # кИ + CN + GbyDqm&Y # Y% a6RTx
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ
----------------------------
0 С.Л. # tyHqrY4b + мвт + VU [вар [GpQH
1 KaVz3eza3m4 # zWJfPBXU) уш [W7
2 Bj] V% s48GSLP? + 2YeN4eJa) FWP
3 г? PAGQByWhTgXWkc # б * Vav>/ 9a
4 9W * и $ # TR&A9zq (xPzVN2tfxpk8
5 SZ # кА + CN + GbyDqm&Y # Y% a6RTx<
6 Ezs8 #) 7 + frvy}) sUZkrFxBH + КН
7 9k4EU9u>v5? GQP {yYMZaZB?
9 и (/>XsBB2pw>errsEzXKAdRMcd
Код:
Пример Логин:
ID пользователя: vectorvictor
Пароль: ****************
PIN-код на 8Y: **** Nr>+
ID пользователя: vectorvictor
Пароль: ****************
PIN-код на 8Y: **** Nr>+
Люди: Если вы хотите использовать этот код, чтобы создать Пасскарта, идти вперед.
Компании: Если вы хотите использовать этот код, чтобы помочь пользователям создавать свои Пасскарта, пожалуйста, спросите у меня разрешения первой. Независимо от того, действительно позволяют им представить * любой * блок 260 символов, которые они выбирают.
Примечание: Я не предлагаю использовать карту, как это для всех ваших паролей, потому что это единая точка отказа, и обеспечивает только относительно небольшое число возможных паролей. (Было бы лучше, чем повторное использование те же самые слабые пароли, однако). В качестве второго канала для аутентификации, кажется, все в порядке.
Для некоторых более забавные факты о взламывания паролей (а по Mt.Gox взломать в частности) см мой предыдущий пост:
http://forum.bitcoin.org/index.php?topic=24727.msg314393#msg314393
Отказ от ответственности: Я математик и алгоритмов парня, но я не очень много знаю о компьютерной безопасности и криптографии. Вся эта идея может быть ужасно сломана. Если это так, то пожалуйста, объясните, почему, так что мы можем придумать что-то лучше.