SMS認証の実装方法
この記事の要点
結果の通知(コールバック)は遅れて返ることがあります。通知を待たずに、コードの入力欄を出す作りにします 再送の上限を決めると、月の通数と料金の上限を計算できます NISTのSP 800-63B-4は、コードは6桁以上、10分以内に認証が終わらなければ無効、1つのコードは一度だけ有効とし、失敗の回数の制限を定めています。再送の間隔と上限は、同書に数字がなく、自社で決めます 実装は、コードを作る・保存する・送る・結果を受け取る・照らし合わせる・再送を管理するの6つの手順で組み、コードの作成と照らし合わせは自社のシステムで行います
SMS認証を自社のシステムで実装するときは、認証コード(ワンタイムパスワード)を作って保存し、配信会社のAPIでSMSを送り、入力されたコードを照らし合わせる流れを組みます。先に決めておくのは、コードの桁数と有効期限、入力の失敗を何回で止めるか、再送の間隔と上限です。これらは自社で決める項目で、米国の国立標準技術研究所(NIST)の指針「SP 800-63B-4」が目安になります。
目次
SMS認証の実装で、自社のシステムと配信会社が受け持つこと
SMS認証の実装では、コードを作る・保存する・照らし合わせる・再送の回数を数えるのは自社のシステムの役目です。配信会社は、SMSを届けて、届いたかどうかを結果の通知で返す役目です。この分け方にしておくと、配信会社を乗り換えても、作り直すのは送信と結果の受け取りの部分で済みます。SMS認証の仕組みそのものはSMS認証とはに、乗り換えのときに作り直す範囲はSMS APIの乗り換え手順にまとめています。
実装の前に決める数字と、NIST SP 800-63B-4の目安
有効期限や再送の間隔に、どのサービスにも当てはまる正解の数字はありません。決めるときの目安になるのが、[NIST SP 800-63B-4](https://pages.nist.gov/800-63-4/sp800-63b.html)(2025年7月公開の最終版)です。SMSなど別の経路で送るコードの定めを、表にまとめました。NISTは米国の政府機関で、この指針は米国の連邦政府のシステムに向けたものです。
| 項目 | NIST SP 800-63B-4の記述(3.1.3.2・3.2.2) | 自社で決めること |
|---|---|---|
| コードの長さ | 10進数で6桁以上を、承認された乱数の生成器で作る | 6桁より長くするか |
| 有効期限 | 10分以内に終わらない認証は無効とする | 何分にするか |
| 使える回数 | 1つのコードは、有効期限の中でも一度だけ有効 | 再送したら古いコードを使えなくするか |
| 入力の失敗(試行回数) | 利用者のアカウントごとに制限する。新しいコードを作っても回数は戻さない。どの手段にも共通の上限は100回以下 | 何回で止めるか、どう戻すか |
| 再送の間隔・上限 | 数字の記述なし | 何秒あけるか、何回までか |
SMS認証を実装する6つの手順
1. 認証コードを作る
コードは、推測されない乱数で作ります。連番や、時刻・電話番号から計算できる作り方は避けます。NISTの指針も、承認された乱数の生成器(approved random bit generator)を使うよう定めています。
確かめ方:開発の担当者に、使っている言語で「暗号用」とされている乱数の機能を使っているかを聞きます。
2. コードを保存する
コードと一緒に保存するのは、誰のどの操作の認証か(会員IDや電話番号)、作った時刻と有効期限、使ったかどうかです。入力の失敗の回数は、コードごとではなく、会員(または電話番号)ごとに数えます。コードごとに数えると、再送で新しいコードを作るたびに回数が0に戻るためです。
コードをそのまま保存するか、元に戻せない形(ハッシュ)にするかも決めます。NISTの指針は、SMSで送るコードの保存の方式までは定めていません。アプリのログに、SMSの本文ごとコードが書き出されていないかも確かめておきます。
確かめ方:テストで認証を1回行い、記録に上の項目があるかを見ます。
3. 配信会社のAPIでSMSを送る
送信のときは、配信会社が用意しているひも付けの項目に、自社で付けた認証ごとのIDを入れます。返ってくる結果の通知が、どの認証のものかを追えるようにするためです。
本文は「【サービス名】認証コードは123456です。」のように短くまとめます。70文字以内なら、1回の送信が1通分で済みます(数え方はSMSの文字数と料金の数え方)。送信の依頼がエラーで返ったときに、画面に何を出すかも決めておきます。
確かめ方:社内の携帯電話に送り、本文が1通に収まるか、IDが結果の通知で返るかを見ます。
4. 結果の通知(コールバック)を受け取る
SMSが届いたかどうかは、自社が指定したURLへ結果の通知として返ってきます。この通知は、SMSが届いてから遅れて返ることがあります。結果を待ってから入力欄を出すと、届いたコードをすぐ入力できない時間が生まれます。送信を頼んだらすぐに入力欄を出し、結果の通知は記録と問い合わせの対応に使います。
記録では、「まだ通知が返っていない」と「届かなかった」を分けます。届かないときの切り分けは、SMS認証が届かないときに確かめることに書いています。
確かめ方:結果の通知を受け取る処理を止めた状態でも、入力欄が出てコードを入力できるかを見ます。
5. 入力されたコードを照らし合わせる
照らし合わせるときは、コードが合っているかに加えて、有効期限の中か、まだ使われていないかも見ます。合っていたら使用済みにし、合わなければ失敗の回数を1つ増やして、上限に達したら止めます。
NISTの指針は、新しいコードを作っても失敗の回数を戻さないよう定めています。再送のたびに0に戻ると、再送を挟みながら何度でも入力を試せてしまいます。止めたあと、時間をおいて戻すのか、問い合わせで戻すのかも決めておきます。
確かめ方:違うコードを上限まで入れ、止まったあとに再送しても入力できないことを見ます。
6. 再送を管理する(間隔と上限)
再送では、次に送れるまでの間隔と、送れる回数の上限を決めます。上限はサーバーの側でも数えます。画面のボタンだけで止めていると、送信の依頼を直接送られたときに止まりません。
再送の間隔は、携帯電話会社の判定を避けるためにもあけます。同じ電話番号あてに短い間に多くのSMSを送ると、携帯電話会社の側で迷惑なメッセージと判定され、送れなくなることがあります。1つの電話番号に1日で送れる通数の上限も決めておきます。
再送の上限を決めると、1回の認証で送る通数の上限が決まり、月の通数と料金の上限もそこから計算できます。再送を3回まで認めると1回の認証で最大4通で、月1,000回の認証なら通数は1,000通から最大4,000通まで動きます。
確かめ方:再送を上限まで押し、超えた分の送信の依頼が配信会社に出ていないことを、送信の記録で見ます。
私の考え:再送と失敗の上限は、料金の見込みと並べて決める
私は、再送と入力の失敗の上限は、開発の担当だけで決めずに、月の通数と料金の見込みを並べて、企画の担当と一緒に決めるべきだと考えています。再送の上限を厳しくすると通数は抑えられますが、SMSが届くのが遅れた利用者は先に進めず、問い合わせに回ることがあります。ゆるくすると、通数の上限が上がります。
入力の失敗の上限は通数を増やしませんが、厳しくすると、止まった利用者からの問い合わせが増えることがあります。再送の上限は、次の表で月の金額に置きかえて見比べます。
ULTIQUE SMSで再送の上限を料金に置きかえる場合
ULTIQUE SMSの料金表で、月1,000回の認証(本文は70文字以内の1通分)を例に計算しました。料金がかかるのは送信先に届いたSMSだけのため、表の金額は再送がすべて届いた場合の上限です。
| 1回の認証での再送の上限 | 月の通数(最大) | 1通の単価 | 月の料金(最大・税抜) |
|---|---|---|---|
| 再送なし | 1,000通 | 10円 | 10,000円 |
| 1回まで | 2,000通 | 8円 | 16,000円 |
| 3回まで | 4,000通 | 8円 | 32,000円 |
配信単価は月間送信数によって決まり、その月に送信したすべての通数に適用されます。配信がない月も、最低利用料金1,000円(100通分込み・税抜)がかかります。
SMS認証を使うときにNISTの指針が求めること:ほかの手段の用意と、電話番号の変更
NISTの指針は、電話網(SMSや音声電話)でコードを送る方法を「制限つき(restricted)」の認証の手段として扱い、すべての利用者がほかの種類の認証の手段も選べるようにすること、と定めています。SMSでコードを送る前に、端末やSIMの変更、番号の移転(MNP)など、危険の兆しがないかを確かめることも勧めています。
もう1つ、実装で気をつけたいのが、登録した電話番号の変更です。指針は、電話番号の設定や変更を、新しい認証の手段の登録として扱います。電話番号を変える画面は、いまの認証を済ませた人だけが使える作りにしておきます。
SMS認証の実装のQ&A
SMS認証の実装では、何から決めればいいですか?
コードの桁数、有効期限、入力の失敗の上限、再送の間隔と上限の4つから決めます。どれも自社で決める項目で、NISTのSP 800-63B-4が目安になります。
SMS認証のコードの有効期限は、何分にすればいいですか?
自社で決めます。NISTのSP 800-63B-4は10分以内に終わらない認証を無効とするため、10分を上限の目安にします。
結果の通知(コールバック)が返るまで、コードの入力欄は出さないほうがいいですか?
いいえ。送信を頼んだら、結果の通知を待たずにすぐ入力欄を出します。結果の通知は遅れて返ることがあり、待っていると、届いたコードをすぐに入力できない利用者が出ます。
SMS認証の再送の上限は、料金にどう関わりますか?
再送を3回まで認めると、1回の認証で最大4通になり、月1,000回の認証なら最大4,000通です。再送の上限と月の認証の回数から、月の通数と料金の上限が決まります。
SMS認証のコードの入力を、何回まちがえたら止めればいいですか?
NISTのSP 800-63B-4が示す上限は100回以下で、その範囲で何回にするか(試行回数)を自社で決めます。同書は、失敗の回数を利用者のアカウントごとに数えて制限し、新しいコードを作っても回数を戻さないよう定めています。
ULTIQUE SMSでSMS認証を実装する場合
ULTIQUE SMSのAPIは、SMS送信APIと配信結果通知(コールバック)の2つです。認証コードの作成や照らし合わせ、再送の上限は、この記事の手順のとおり自社のシステムで組みます。詳しいAPI仕様書は、お問い合わせいただければお送りします。
用意していただくのは、送信元の電話番号、接続元のIPアドレス、コールバックURLの3つと、APIを呼び出す自社側の開発です。審査と送信元番号の登録、契約の締結を経て、最短1週間〜10日で使い始められます。初期費用とAPI連携の費用はかかりません。
| 項目 | ULTIQUE SMSの場合 |
|---|---|
| 接続方式 | HTTPS(POST)・JSON形式 |
| 認証 | API ID・パスワード(接続元のIPアドレスの制限もできます) |
| 結果の通知 | 送信ごとに、あらかじめ指定したコールバックURLへ自動で返ります。通常は配信後数秒〜数分で、携帯電話会社の状況によって遅れることがあります |
| 通知の内容 | 配信結果・課金の通数など |
| ひも付けの項目 | 管理ID+自由項目3つ |
| 宛先・回線 | 日本国内の携帯電話番号。国内網(国内回線)で配信 |
| 送信の速さ | 通常は1秒あたり約4〜5通 |
| 本文 | 最大660文字(70文字までで1通) |
次に確かめること
- 有効期限・入力の失敗の上限・再送の間隔と上限を、自社の数字で書き出したか
- 再送の上限から、月の最大の通数と料金を計算したか
- コードの入力欄が、結果の通知を待たずに出る作りになっているか
あわせて読みたい記事
ULTIQUE SMSを使ってみませんか
初期費用・月額固定費0円。お申込みから最短1週間〜10日で使い始められます。
情報の確認日:2026-11-05

SMS認証とは本人確認・認証
SMS APIの乗り換え手順他社SMSから乗り換える