SMS認証とは
SMS認証とは、携帯電話の電話番号宛にショートメッセージ(SMS)で認証コードを送信し、そのコードを入力させることで本人確認を行うセキュリティ手法です。二要素認証(2FA)の一種として、世界中の多くのオンラインサービスで広く採用されています。
ユーザーがログインやアカウント登録を行う際、サービス側が4〜6桁のワンタイムパスワード(OTP: One-Time Password)をSMSで送信します。ユーザーはそのコードを画面上に入力することで、「その電話番号を持っている本人である」ことを証明します。
SMS認証が普及した背景
従来のパスワードのみによる認証では、パスワードの漏洩やフィッシング攻撃により不正アクセスが多発していました。そこで「知っているもの(パスワード)」に加えて、「持っているもの(携帯電話)」による二段階の確認を行うことで、セキュリティを大幅に向上させる手法が求められるようになりました。
SMS認証が特に普及した理由は以下の通りです。
- 導入の容易さ:専用アプリや物理デバイスを必要とせず、携帯電話があればすぐに利用可能
- ユーザーの馴染みやすさ:SMSは日常的に使われているため、技術的な知識がなくても理解しやすい
- コストの低さ:サービス事業者にとって、SMS送信のコストは他の認証手段と比較して低い
- 幅広い端末対応:スマートフォンだけでなく、フィーチャーフォン(ガラケー)でも受信可能
SMS認証の技術的な仕組み
SMS認証の技術的な流れは以下のステップで構成されています。
- ステップ1 - コードの生成:サーバー側で暗号学的に安全な乱数生成器を用いて、ワンタイムパスワード(OTP)を生成します。一般的に4桁〜6桁の数字が使用されます。
- ステップ2 - SMSの送信:生成されたOTPを、SMS配信サービス(Twilio、AWS SNSなど)のAPIを通じてユーザーの電話番号宛に送信します。
- ステップ3 - コードの検証:ユーザーが入力したコードとサーバー側で保持しているコードを照合します。有効期限(通常5〜10分)内に正しいコードが入力されれば認証成功となります。
- ステップ4 - セッションの確立:認証が成功すると、サーバーはユーザーに対してセッションまたはトークンを発行し、サービスへのアクセスを許可します。
SMS認証の安全性と限界
SMS認証はパスワードのみの認証と比較して格段に安全性が高いものの、完全ではありません。以下のようなリスクが指摘されています。
- SIMスワッピング攻撃:攻撃者が携帯電話会社に成りすまし、ターゲットの電話番号を別のSIMカードに移行させる手法です。これにより、攻撃者がSMSを受信できるようになります。
- SMSの傍受:SS7(Signaling System No. 7)プロトコルの脆弱性を悪用して、SMSメッセージを傍受する攻撃が理論的に可能です。
- フィッシング:攻撃者が偽のログインページを用意し、ユーザーからパスワードとSMS認証コードの両方を騙し取る中間者攻撃のリスクがあります。
- マルウェア:スマートフォンに感染したマルウェアがSMSメッセージを読み取り、認証コードを外部に送信する可能性があります。
より安全な認証方法
SMS認証の脆弱性を踏まえ、近年ではより安全な認証方法への移行が進んでいます。
- 認証アプリ(TOTP):Google Authenticator や Microsoft Authenticator などのアプリが生成する時間ベースのOTPは、通信経路を介さないためSMS認証より安全です。
- FIDO2 / パスキー:生体認証やハードウェアキーを使用する最新の認証規格で、フィッシング耐性が高く、最も安全な方法の一つとされています。
- ハードウェアセキュリティキー:YubiKeyなどの物理デバイスを使用する方式で、物理的に所持していないと認証できないため、リモート攻撃に対して極めて強固です。
まとめ
SMS認証は、手軽さと幅広い対応端末という利点から世界中で広く普及している認証方式です。パスワードのみの認証と比較して安全性は大幅に向上しますが、SIMスワッピングやSMSの傍受といったリスクも存在します。より高いセキュリティが求められる場面では、認証アプリやパスキーなどの代替手段を検討することが推奨されます。
いずれにせよ、SMS認証を含む二要素認証を有効にすることは、アカウントのセキュリティを向上させるために非常に重要なステップです。