web-dev-qa-db-ja.com

UUIDの人間が読める形式の代替

私は、研究者がプライバシーに重要なデータを利用できるようにするために、仮名を多用するシステムに取り組んでいます。これらの仮名には、次のプロパティが必要です。

  1. 情報(作成時間、他の仮名との関係、エンコードされたデータなど)を含めることはできません。
  2. 一意の仮名を簡単に作成できるはずです。
  3. それらは人間が読める形式でなければなりません。つまり、声に出して読んだときに、人間が比較、コピー、理解しやすいものでなければなりません。

私の最初のアイデアは ID4 を使用することでした。 (1)と(2)はかなり良いですが、(3)はあまり良くありません。

変形は、より広いアルファベットでUUIDをエンコードし、結果として文字列を短くすることです(たとえば、 shortuuid を参照)。しかし、これが実際に読みやすさを向上させるかどうかはわかりません。

私が現在検討しているもう1つのアプローチは、2005年の論文 "患者IDの最適なコード" で、私の問題に正確に取り組むことを目的としています。そこで説明されているアルゴリズムは、30ビットのエントロピーを持つ8文字の仮名を作成します。しかし、もっと広くレビューされた標準を使用したいと思います。

次に、gitアプローチもあります。実際の仮名の最初の数文字のみを表示します。しかし、これは、仮名がしばらくするとその一意性を失う可能性があることを意味します。

だから私の質問は:人間が読める一意のIDのために広く使われている標準はありますか?

7
tobib

このために広く使用されている標準を認識していません。広く使用されていないものは次のとおりです。

Proquints

https://arxiv.org/html/0901.4016

https://github.com/dsw/proquint

UUID4(128ビット)は8つのプロキントに変換されます。それが多すぎる場合は、UUID4の最後の64ビットを取ることができます(= 64ランダムビットを取るだけです)。これにより、魔法のように独自性が失われることはありません。衝突の可能性を増加させるだけです。これは、最初はゼロではなく、数学的に推定して、目的に問題がないかどうかを判断できます。

5
Vasiliy Faronov

この記事 gitと同様に、SHA-256ハッシュの最初の数文字を使用することをお勧めします。 UUIDは通常SHA-1に基づいているため、これはそれほど違いはありません。プロパティ(2)と(3)の間のトレードオフは、文字数にあります。

dを桁数とすると、合計で2 ** (4 * d)識別子が得られますが、最初の衝突は2 ** (2 * d)の後に発生すると予想されます。

大きな問題は、実際には使用する識別子の種類ではなく、衝突をどのように処理するかです。

1
tobib