私の現在のプロジェクトはNode.jsで初めてです(MongoDB、Mongoose、Expressも重要です)。気を散らすと、私はユーザー認証を扱う方法を決めながら、暗号のウサギの穴を塞いでしまいました。 (このプロジェクトでは他の暗号化は必要ありません)。 this page(パターンではなく、コード - 私はノード-ナトリウムでnode.bcryptをインストールしなくて問題を抱えています)上のパターンに続きパスワードを正しくハッシュしていますか?
とalso this page私のプロセスは
新しいユーザーがhttps
上でパスワードを送信でスキーマ塩
スキーマは
パスワードと塩の連結をハッシュ生成
スキーマは今、この私の個人的な不足ならば、私は知りませんが、私はthe libsodium documentation以下の問題を抱えていたユーザ情報
と塩とパスワードを保存します。 node-sodiumは、ハッシングの追加情報を提供していません(ただし、暗号化の例があります)。
これは、私はハッシュを生成するために使用するコードです:
let buf = new Buffer(sodium.crypto_pwhash_STRBYTES);
sodium.randombytes_buf(buf, sodium.crypto_pwhash_STRBYTES);
let salt = buf.toString();
let preBuffer = "somePass" + salt;
let passwordBuf = Buffer.from(preBuffer);
let hash = sodium.crypto_pwhash_str(passwordBuf, sodium.crypto_pwhash_OPSLIMIT_INTERACTIVE, sodium.crypto_pwhash_MEMLIMIT_INTERACTIVE);
そこで問題は二つの部分です。これは良いプロセスですか、適切なコードですか?
このコードはセキュリティ上の観点から__完全に__です。 SHA512の一回のパスは、パスワードのハッシュに十分ですが、実際のパスワードハッシュを使用することと全く同じです。あなたの 'rand'関数がどこから来ているのかわからなくても、私はそれが暗号的に安全なランダム値を提供していないと考えているので、安全でもありません。こちらもご覧ください:https://paragonie.com/blog/2016/02/how-safely-store-password-in-2016 –
@Alan [推奨読書](http://www.cryptofails.com/post/75204435608)/write-crypto-code-dont-publish-it)を実行します。 –
@ScottArciszewski記事のためにありがとう – Alan