web-dev-qa-db-ja.com

SMS経由のアクティベーションコードで回避する数字と文字はありますか?

アプリケーション開発のかなり早い段階にあり、SMSを介して送信されたアクティベーションコードをブラウザのURLに入力することに関するユーザビリティの問題が発生しています。

基本的なシナリオは次のとおりです。

  1. メールまたは電話で登録できます
    • メールでサインアップすると、アクティブ化するためのリンクが記載されたメールが届きます。
    • 電話でサインアップすると、SMSがアクティブ化するリンクとともに表示されます。
  2. リンクをクリックしてアクティブにし、パスワードを設定します。

「ダム電話」でこれを試してもらいました(ウェブ閲覧機能のない標準のクラムシェル)。この人は彼女が私たちのサービスのために共有したり使用したりするのが快適だと感じたメールを持っていませんでした。彼女はデスクトップコンピュータのブラウザにアクティベーションURLを入力しました。

ただし、アクティベーションコードには混乱を招く数字と文字が含まれているため、正しくする前に複数の試行が必要であることがわかりました(たとえば、1と0は区別が困難で、「l」または「1」または「O」または「0」でした。 )。

サンプルアクティベーションコード: AX6elp90grPo

初期修正

どの文字と数字が互いに混同しやすいように「推測」してそれらを排除することで当面の問題に対処する予定です、または常に1を使用します(たとえば、「1」のように見えるものは常に「1」)。

質問:

このような状況に対する標準的な推奨事項または慣行が既にあるかどうか疑問に思っていました(具体的には、どの文字または数字を削除する必要があるか)?

また、SMSを介してアクティベーション情報を処理する方法など、他の関連する提案も受け付けています。

36
brightgarden

あなたは本当にあなたのユーザーを気遣い、あなたのインターフェースを通して考えているように見えるので、私は一つの提案をします:ユーザーは手動で任意のコードを入力する必要がないはずです!

代わりに、自由に利用できる英語の単語リストからコードを生成するだけです。

Your activation code is "Large Sinister"

もちろん、句読点間、大文字、スペースは問題になりません。

Edithttp://wcodes.org/ は、他の回答で指摘されているように、おそらく使用に適したライブラリです。

26
Ben

はい、問題を解決する方法の例があります。 pwgen には、あいまいな文字のリストがあります:B8G6I1l0OQDS5Z2このファイルにあります Cコードを読み取れる場合)。

別のコードスニペットはここにあります 、PHP今回は。

前者のアプローチは「ブラックリスト」アプローチを使用しており、後者は代わりに「ホワイトリスト」アプローチを使用しています。

22
Daniele

一般に、割り当てられたパスワードは、あいまいな文字を避ける必要があります。たとえば、Microsoftアクティベーションコードです。ゼロ(0)を入力する人もいるので、文字Oは使用しません。同様に、許可された文字をトリミングして、曖昧なまたは混乱する文字を可能性のセットから削除する必要があります。たとえば、これは生成されたパスワードで使用する文字セットです。

abcdefgh  k mnop rst  wx zABCDEFGH JKLMN PQR T  WXY 34 6 89

キャラクターを適切に区別できなかったためにユーザーがコールしたときはいつでも、リストから削除されました。これが、2、5、S、およびZが削除された理由です...あいまいであるとは思わなかったが、ユーザーがそれらを書き留めた後だった。

追加したい...このパスワードジェネレーターを今日再作成すると、ランダムな短い単語の xkcd method (AOLでも使用される)が使用されます。

17
Myrddin Emrys

マイクロソフトは、ユーザーが判読できるアクティベーションコードを長期間処理する必要があります。私は彼らが彼らの決定にいくつかの科学を入れたと思います。分析する作業からのアクティベーションコードの山がありました。これがfakedサンプルコードです:

V3MKH-7GMWJ-PHRWW-Q9RD3-M84FR

まず、すべての文字はUPPERCASEです。この動きだけで、かなりの混乱が解消されます。 (私はそれがエントロピーを取り除くことを私は理解しています-必要なら、長さを少し増やすことでそれを補うことができます。私が実際にお勧めするのは大文字を提示することですが、入力ではどちらのケースも受け入れます。)

それぞれ25文字(合計775文字)の31個のコード全体を見ると、それらが実行した文字notは次のとおりです。

A E I L N O P S U Z

0 1 5

最後に、コードをチャンクに分割することに注意してください。コードが分割されるまでの期間がどのくらいになるかを推測することはできませんが、実験のために検討することもできます。

10
peteorpeter

Base 32エンコーディング は、この目的で定義された標準です。いくつかのバリアントがありますが、それらはすべてあいまいな文字を避けようとします。これはリンクされた記事の根拠です:

Base32は、制限された記号セットを使用して任意のバイトデータをエンコードする表記法で、人間が便利に使用でき、制限された文字セットのみを認識する古いコンピュータシステムで処理できます。

10
Pau Giner

求めているのは、効率的なヒューマンコンピュータコードです。私がお勧めするのは、リテラル(意味のある)words、特に名詞を使用してデータ全体をエンコードすることです。

私はまさにそれを行うためのソフトウェアを開発しています-そして最も効率的に。私はそれをWCodeと呼びます。
厳密に言うと、ベース1024エンコーディング-記号の代わりに単語を使用します。

ここにリンクがあります:
プレゼンテーション:https://docs.google.com/presentation/d/1sYiXCWIYAWpKAahrGFZ2p5zJX8uMxPccu-oaGOajrGA/edit =
ドキュメント:https://docs.google.com/folder/d/0B0pxLafSqCjKOWhYSFFGOHd1a2c/edit
Project:https://github.com/San13/WCode (私が移動している間、しばらくお待ちくださいアップロードしています...)

2
Ujjwal Singh

WCodeや "Large Sinister"でのBenの回答のように、文字列自体を覚えやすくするためにもう1票(評判がある場合)。物事の国際的および技術的な側面では、使用される文字セットは http://en.wikipedia.org/wiki/GSM_03.38 である必要があります

2
Janne