ランダム文字列URL生成に関するメモ
   2 min read

推測されないような文字列を動的に生成しURLに利用できるような仕組みを調べていますが、その調査メモです。

ちょうど私が調べている時期と重なって、関心対象が同じ資料がアップロードされていました:

上記資料によると、W3Cのドキュメントでは capability URLs と呼称されてているようです。 下記が参考資料のようです:

ただし、例えば Stack Overflow で capability url を検索しても全くヒットせず、浸透している用語とは言い難いように感じます(Stack Overflow では generate random string url 等で検索するほうがまだヒットした)。

の回答によると、 UUID は推測困難な文字列を生成するとは言えず、冒頭に記載した用途としては不向きなようです。

次のように、RFCにがっつり明記してあります。

Do not assume that UUIDs are hard to guess; they should not be used as security capabilities (identifiers whose mere possession grants access), for example. A predictable random number source will exacerbate the situation.

の回答にあるように、Javaの場合、重複しないことが重要なようなら UUID, 推測されないことが重要なら SecureRandom を用いるのが良いのかなと思いました(冒頭の要件なら SecureRandom ですね)。

ちなみに Docker で /dev/random を使うと、起動してからエントロピーが貯まるまで処理がブロックされる、みたいな問題も何回か聞いたことがあります

ので、その辺りも確認しておいたほうが良いかも知れません。 SecureRandom は、インスタンスの取得方法によって /dev/urandom, /dev/random のどちらを使うかが変わるようです。

(そして上記リンクによれば、特に /dev/random を使うメリットは無い、という話も)

ちなみに Ruby には SecureRandom.urlsafe_base64 なんていう今回の目的そのまんまっぽい名前のメソッドがありました。