アカウントの認証
アカウントの認証
WEB サービスを利用する際にサービスにログインする必要がある場合があります。
個人情報の入力を省く
例えば、買い物をする場合は住所や支払い方法などの個人情報が必要となりますが、 それらの情報を毎回入力するのは手間であるためサーバーに保存し、 ログインすることで個人情報入力の手間を省くことで買い物の手間を省くことができるようになります。
権限を管理する
ブログサービスなどでは記事の投稿やデザインの変更などの権限を管理するためにアカウント認証が必要になります。 権限については投稿、閲覧権限、閲覧だけ、デザインの変更もできる。他のユーザーの権限を管理するアカウントなどがあります。
ログイン自体を簡単にする
ログインすること自体の手間を省く方法として Facebook や Google などを使ってソーシャルログインができるサービスも多くあります。
不正
アカウント所有者になりすまして買い物をされたり、ブログを改変されたりする不正が行われることがあります。
不正ログイン
ID とパスワードが漏洩してしまえば不正ログインされる可能性が高くなります。 また、Facebook や Google に不正ログインされれば連携しているサービス全てが乗っ取られることになります。 2段階認証など不正ログインを防ぐ方法が推奨されています。
不正サービス連携
不正ログインが防げたとしても、不正サービス連携ができてしまっては困ります。 ログインするために使用するサービスアカウントへのログインは自分のものを使用し、他人が使用しているサービスアカウントに連携できてしまうと、 そのサービスが乗っ取られます。
2020/09/10:「○○○口座」というサービスを使って銀行口座から不正に預金が引き出されるという報道がありました。
- 攻撃者の「○○○口座」のアカウント作成はメールアドレスの認証だけで捨てアドでも可能だった
- 他人の銀行口座との連携が簡単にできた
- 他人の銀行口座から不正に出金することができた
口座の持ち主の知らないところで勝手に他のサービスと連携できてしまうのは恐怖ですね。個人でできることはあるのでしょうか
ID / Password を使った認証
多くの WEB サービスで利用されている方法です。ユーザーはログイン画面で ID とパスワードを入力することで WEB サービスにログインします。 ID とパスワードの情報を知っているということで正しいユーザーであると認証されます。 PC やスマホを操作しているユーザーが本人ではないとしても、サービス側からは本人だと認識してしまいます。
SMS やワンタイムパスを使用することで、サービス側に登録されている端末を所有していることを証明できます。 スマートフォンなどの端末を持っていて、それを操作できるのは本人だけだと考えます。 ID とパスワードだけでログインできてしまうよりも、不正ログインへの防御が強力になります。
秘密鍵による認証
開発者や運営者には馴染みのあるアカウント認証です。ログインに使用する秘密鍵(ファイル)を自分が使用する PC に保存しておき、サーバーに公開鍵を保存しておきます。 秘密鍵を持っていることで正しいユーザーであると認証されます。秘密鍵が流出すると不正ログインされることになります。 多くの場合、サーバーへのアクセスは IP アドレスによる制限や踏み台サーバーなどにより秘密鍵が流出しても不正ログインを防ぐ仕組みにしています。
- ローカル PC で秘密鍵を作成する
- ローカル PC で秘密鍵から公開鍵を作成する
- サーバーに公開鍵を保存する
- サーバーにログイン要求をする
- サーバーは保存された公開鍵を使ってログインに必要な情報を暗号化する
- サーバーからローカル PC に暗号化された情報を送信する
- ローカル PC の秘密鍵を使って暗号化された情報を復号化する
- サーバーに復号化された情報を送信する
- サーバーは複合化された情報を検証する
公開鍵を使って暗号化された情報を復号化するためには秘密鍵が必要です。
ブロックチェーンにおけるアカウントの認証
ブロックチェーンネットワークでは ID/パスワードは使用されず、秘密鍵を使った認証が行われます。
- ローカル PC に保存されている秘密鍵を使ってトランザクションに署名をする
- 署名されたトランザクションをブロックチェーンネットワークに送信する
- ブロックチェーンネットワークに接続しているノード
- トランザクションに含まれる公開鍵を使って署名を検証する
- トランザクションの有効性を検証する
- 他のノードへ伝搬する
- ブロックチェーンネットワークに接続しているノード(ブロック生成ノード)
- トランザクションを検証してブロックに含める
ブロック生成については今後の記事で書きます。
- 署名作成は秘密鍵を使用します。
- 署名の検証は公開鍵を使用します。
- 送信者アドレスは公開鍵から作成します。
署名が正しければトランザクションを送信するのは誰でもいいということになります。 正しい署名ができるのは秘密鍵を持っている人だけです。
次回
次回は秘密鍵、公開鍵、署名について