Если вы используете только «открытый ключ» (который на самом деле не является открытым ключом, это nonce , и он действительно должен быть случайным, если вы действительно не хотите, чтобы его можно было использовать черезопределенный период времени, в этом случае убедитесь, что вы используете HMAC с секретным ключом для его генерации, чтобы злоумышленник не мог предсказать одноразовый номер ), чтобы предотвратить повторные атаки , иэто фиксированный размер, тогда конкатенация может не быть проблемой.
Тем не менее, я немного обеспокоен тем, что у вас может не быть продуманной модели безопасности.Какую атаку это пытается предотвратить?Хэш пароля пользователя не засолен, поэтому разрыв вашей базы паролей в любом случае достаточно легко откроет незашифрованные пароли, и, хотя наличие ограниченного по времени одноразового номера ослабит атаки повторного воспроизведения с пассивного анализатора, такой пассивный анализатор может просто украсть ключ сеанса пользователя.тем не мение.Говоря о том, почему бы просто не использовать ключ сеанса в качестве одноразового номера вместо системы, основанной на отметке времени?
Но на самом деле, почему бы просто не использовать SSL?Криптография действительно трудна , чтобы получить правильные результаты, и люди, намного умнее вас или меня, потратили десятилетия, изучая безопасность SSL, чтобы сделать это правильно.
Редактировать : Если вы 'Если вы обеспокоены атаками MITM, то ничто, кроме SSL, не спасет вас.Период.Мэллори может просто заменить вашу сверхзащищенную форму входа на ту, которая отправляет ему пароль в виде открытого текста. Игра окончена. И даже пассивный злоумышленник может видеть все, что происходит по сети - , включая ваш сессионный cookie .Когда у Евы есть файл cookie сеанса, она просто внедряет его в свой браузер и уже вошла в систему. Игра окончена.
Если вы говорите, что не можете использовать SSL, вам нужно взятьочень трудно понять, что именно вы пытаетесь защитить, и какие виды атак вы будете смягчать.Вам, вероятно, понадобится реализовать какое-то настольное приложение для криптографии - если MITM работают, то вы не можете доверять ЛЮБОМУ вашему HTML или Javascript - Мэллори может заменить их по своему желанию.Конечно, в вашем настольном приложении должен быть реализован обмен ключами, шифрование и аутентификация в потоке данных, а также аутентификация удаленного хоста - это в точности то, что SSL делает .И вы, вероятно, будете использовать те же алгоритмы, что и SSL, чтобы сделать это, если вы все сделаете правильно.
Если вы решите, что MITM не входят в сферу применения, но вы хотите защитить от пассивных атак, вы 'Возможно, мне потребуется реализовать серьезную криптографию в Javascript - мы говорим о обмене Диффи-Хеллмана для генерации сеансового ключа , который никогда не передается по сети ( HTML5Веб-хранилище и т. Д.), AES в Javascript для защиты ключа и т. Д. И в этот момент вы в основном реализовали половину SSL в Javascript, только есть вероятность, что в нем больше ошибок - не в последнюю очередь этопроблема в том, что довольно трудно получить безопасные случайные числа в Javascript.
По сути, у вас есть выбор между:
- Не реализовывать какую-либо реальную криптографическую защиту (очевидно, не выбор, так как выреализует все эти сложные протоколы аутентификации)
- Реализация чего-то, что очень похоже на SSL, но, вероятно, нет
- Использование SSL.
Короче говоря - если имеет значение безопасность, использует SSL .Если у вас нет SSL, установите его .Любая известная мне платформа, на которой можно запустить JS, также может обрабатывать SSL, поэтому на самом деле нет оправдания.