doublejumptokyo/go-lbd

nonce生成のためのrandの初期化の問題

Closed this issue · 3 comments

お世話になります。

こちらのライブラリを利用しているのですが、nonce生成のためのrandの初期化ですがこちらでrand.NewSource(time.Now().UnixNano())で初期化してるため、乱数処理が別マシンで初期化実行タイミングが揃って同じタイミングでリクエスト発行すると同じnonceになりエラーが起こり得る感じになっています。(実際発生しました)
実環境での運用だと厳しいので実装の見直しが必要そうですがどうでしょうか?

go-lbd/lbd.go

Line 34 in c33d9bd

randSrc = rand.NewSource(time.Now().UnixNano())

ちょっと想定と違うかもなのでいったんcloseさせていただきます

普通に同一マシンでも大量に生成すると衝突しそうでした。実装をcrypto/randなど使うと避けられそうです

実際のこちらで行ってる処理に近いテストコード
https://gist.github.com/nyankichi820/cef786ded87bd494793f2897b357b9c1