Мне дали совет, что я подозрителен о том, таким образом, я ищу поддержку здесь, чтобы возвратиться и бросить вызов совету.
Мне рекомендовали использовать Diffie-Helman, чтобы заставить обе стороны договариваться о секретном ключе, использовать секретный ключ, чтобы генерировать ключ AES и затем использовать AES для шифрования/дешифрования паролей, которые передаются. В значительной степени как пример кода здесь
При использовании этой схемы длина зашифрованного пароля совпадает с длиной незашифрованного пароля. Я должен быть взволнован по поводу этого?
Прежде, я использовал RSA, шифруя пароли с открытым ключом получателя. Это приводило к зашифрованной длине 256 независимо от того, что длина пароля. Разве это не лучше?
Вы можете просто подумать о любой длине с любыми данными. Это не должно быть случайным. До тех пор, пока все зашифровано. Я думаю, хотя это наименьшее из ваших забот.
Примечание. Если вы используете Defie-Hellman, вам все еще нужно аутентифицировать отправленные параметры, которые вам, вероятно, надо делать с RSA.
Альтернативы:
Если вы все сделаете все это, то вы должны также беспокоиться о том, были ли обмены воспроизведены, чтобы сделать вас повторно использовать ключевые ключи и т. Д.
, если вам нужно честно, если вам нужно задать этот вопрос, то вы, вероятно, не имеют квалификации, чтобы написать Crypto Protocol. Они чрезвычайно трудно правы, а не для слабонервных.
Предложите вам использовать SSL / TLS для вашего обмена, если вам нужно будет транслировать много данных. PGP / PKCS # 7 Если вам просто нужно отправить одно сообщение.
Во-первых: не изобрести свой собственный протокол аутентификации. Период. Если вы сделаете, вы ошиблись, даже если вы используете сильное шифрование. Существует ряд существующих хорошо документированных протоколов аутентификации, которые были связаны с криптографами, и, таким образом, считаются безопасными. Не соблазните «упростить» их, они уже были упрощены.
Второе: IMHO Вы никогда не должны отправлять пароли на проволоке для аутентификации (я не знаю о любом протоколе аутентификации, который, в том числе, включая ужасно небезопасный протокол NTLMV1) [1].
Если вы мертвы, настаиваете по пути «Roll My Short Aubtication Schood», вот как я бы сделал схему, которую вы описали выше более безопасны (предостерегаете: я не криптограф - я верю, что есть Серьезные слабости в том, что я здесь описываю):
вместо того, чтобы отправлять пароль напрямую, отправить одностороннюю функцию (также известную как OWF, часто реализуемый как криптографический хеш, такой как SHA256 или сильнее) пароля.
Другими словами, у сервера отправляют клиент значение соли, добавьте соль в пароль, вычислите OWF пароля + значение соли и отправьте результат OWF на сервер. На сервере добавьте соль в пароль, а также выполните расчет OWF. Если результаты одинаковы, пароль действителен, если они не оно неверно.
И, наконец, у вас есть все, что вы делаете рецензируемым настоящим криптографом. Они будут находят проблемы в вашей реализации, и вам придется их исправить. Они могут предположить, что вы отказываетесь от своих усилий в пользу существующего опубликованного протокола.
[1] AFAIK, единственный раз, когда вы должны отправить пароль на проволоке, заключается в том, когда вы меняете пароль и даже тогда, вы должны прокладывать длину на краткий размер блока (включите длину в Cybertext, чтобы, когда Вы расшифруете его, вы можете различать пароль и прокладку).
Если вы можете помочь, не отправляйте пароли по сети вообще. Вместо этого используйте такую схему, как SRP, которая аутентифицирует обе стороны с помощью одного пароля.