0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FlaskでWebauthn

Posted at

はじめに

最近では様々なサイバー攻撃が起こっており、セキュリティに対する意識も高くなってきているかと思います。
その中でもユーザー認証というところに着目してみたいと思います。

ユーザー認証方法の代表例

# 認証方法 セキュリティリスク 備考
1 ユーザーID + パスワード 言わずもがな、某アプリでパスワード漏洩で大変なことになってましたね。。。
2 多要素認証 ユーザーID + パスワード + SMS認証などで現在はこの方法が推奨されていますね。
3 生体認証 ここ数年で出てきたのかなと思っています。Yahoo!などがいち早く取り入れていましたね。

まだまだあると思いますが主にということでここまでにしておきます。
※セキュリティリスクは主観でざっとつけたのでご意見等あるかもしれませんがお見逃しください。。。

どれがいいの?

利用されるサイトの質などにもよると思うので、一概にどれが一番ということは言えませんが、一つずつ見ていきましょう。

1. ユーザーID + パスワード

最近ではあまり推奨されていないですね。
ただし、外部公開しないような企業のイントラサイトなどでは以下の点に留意すればある程度は問題ないのかなと個人的には思っています。

  • パスワードの複雑化(大文字小文字を含む英数字+記号など)
  • パスワードの定期更新(3か月に一度など)

ただ、パスワードって基本的には同じもの(あるいは似たもの)を使い回す方が多いですよね。
そうすると一つのサイトでパスワードが漏洩してしまうと様々なサイトで不正アクセスされてしまうリスクがあります。
これが一番のデメリットだと思います。

2. 多要素認証

多要素というくらいなので様々な要素を掛け合わせて複雑化するといったイメージでしょうか。
よく見るのは「ユーザーID + パスワード」で認証後、SMSでPINコードを送付して認証する2段階のものですね。
SMSで送付されるPINコードはワンタイムのものが基本で有効期限もかなり短いものとなっています。
これであればスマホ端末を他人に利用されていない限りは本人しか認証することは難しいですよね。
そのため、この方法が推奨されているのだと思います。

ただ、上記で挙げた例で言えばPINコードも数字の4桁や6桁であることが多く適当に入力すれば当たってしまう可能性がないわけではないです。
この部分がどうにかならないのかとモヤモヤしていました。。

3. 生体認証

そこで生体認証です。
2018年頃からWebauthnという技術が出てきたようです。
簡単に説明すると、「Webブラウザ上で端末の生体認証機能を利用して認証することができる」ものです。
ということは端末を持っていて、かつ自身(指紋や顔などで認証)でないと認証不可ということです。

しかしサイトの構築方法によりますが、他端末でアカウントの共有が難しかったり、生体認証に対応してない端末だと利用できないというデメリットはあります。
後者はガラケーやらくらくフォン、キッズケータイなどでなければ、最近のスマホは基本的には対応しているかと思います。
前者も対応できないことはないのでこれは試す価値ありですね。

実際に書いてみた

ということで先人の方々が情報やライブラリを残してくださっていたのでそれを利用してやってみました。
動作確認用なのでDBを使わずにファイルIOだけでデータ管理を行なっています。
参考になれば幸いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?