認証系のエンジニアをやっていた身として、ふと思ったことを書いてみる。
認証基盤を手作りしているアプリは世の中に多く存在している。
そのほとんどが、パスワード認証の焼き回しがほとんどではないかと思う。
2要素認証を実装したとしても、メールでOTPを送り付けるぐらいではないかなと思う。
パスワード認証はそもそも2018年の時点ですら推奨されていない。今は2026年である。
パスワードの父と呼ばれる「Fernando José Corbató」は、「the password has become “kind of a nightmare.”」という悪夢という言葉を用いて、パスワードの現状を大きく否定している。
Windows Helloに続き、WebAuthnが標準化されて、世の認証はMFA, SAML, FIDO, WebAuthnなどが使用されるようになってきた。
認証には、所持:Possession, 知識:knowledge, 生体:biometricsの3パターンがある。
パスワードはこのなかで、 knowledgeという自分だけが知っている知識である。
推測可能性が高く、乗っ取りアカウントの多くがパスワード認証である。
昔は3か月に一度変えたほうがよい。なんて言われていたが、正直無意味である。セキュリティ意識のない一般ユーザーはほぼすべてのアカウントでパスワードは使いまわすものと認識している。教育コストをかけたところで変わらない。
(エンジニアですら、APIキーやパスワードをそのまま生成AIに投げる人がいるのに!)
にも関わらず、日本のアプリはいまだにパスワード認証を実装し続けている。
大前提として、通信経路に認証情報が流れないことが重要となる。
具体的には、パスワード。
なんの知識もないエンジニアが通信経路にパスワードを流したり、脆弱なハッシュ方式でハッシュ化された値を流したりしている。Base64で流しているものも見たことがある。
日本昔話でしょうか?おとぎ話ならまだ良いが、、、
ならいっそう、手作りはやめてしまって、認証連携だけするようにしたら良いのでは?
クラウドサービスの多くは、認証/認可のマネージドサービスが実装されている。
認証基盤を1から手作りするようなリスクとクラウド認証/認可サービスのコストを比較しても、リスクのほうが大きいように思う。オンプレで全部やりたいっていう日本企業もたまにいるが、逆にリスクでは??笑
(昔から独自にやっているものは信用しないといわれている。認証アルゴリズムなんて、独自でやっていたら逆に危ない。よく知られて検証されている認証アルゴリズムのほうが安全だと考えられている。隠蔽によるセキュリティは本当のセキュリティではない)
例えば、Aシステムで手作りした認証をつかっていたが、Bシステムでも手作りする。
それから、クライアントはエンドユーザーからの要望があり、「SSOで1回ログインしたら、ほかのところでも使えるようにしてほしい。」と仕様変更を依頼してくる。認証系で定番の追加要望である。私もいままで何度もこの要望を聞いてきました。「今2つの認証があるんだから、それを1つにするだけでいいですよ~。」なんて言われたりして。2つの認証の実装工数を考えたら、クラウドのほうが安かったのでは?後から多要素認証したいなんて言われたら余計に、、、
だいたいこんな感じで後から要望がくるなら、最初からSSOを前提に作っておけば良いのでは?と思うが、予算が下りてこない。じゃあ、そもそも実装コストを減らしてクラウドサービスを使っておけば良いのでは?と思う。
パスワード認証に戻るが、生体認証を手で実装するようなアプリをあまり聞いたことがない。認証アプリをつくっていたときは、それが専門なので生体認証やセキュリティキーなどをつくっていたが、普通の一般業務向けアプリで生体認証やセキュリティキーなどを実装しているのは少数だと思う。そもそも知識があるエンジニアも少ない。RFCを読み込むのが大変である。。。(生成AIのない時代によくあのややこしい実装をやったな~)
もう手で認証を実装するのはやめてしまって、クラウドの認証基盤を使ったほうが早いし安い!!!笑 AWSならCognitoとか、AzureならAD B2Cとか、GCPならIdentity Platformとか!
と個人的には思っています。