2022年02月22日 | 公開。 |
2024年09月27日 | Googleアカウントの仕様変更に応じて、内容を変更。 |
ESP8266/ESP32等のIoT機器からGmailのSMTPサーバー(メールの送信に使うサーバ)にログインするには、アプリパスワードと呼ばれる、特殊なパスワードが必要です。また、このアプリパスワードを使用するには、Googleアカウントで、2段階認証をする様に設定する必要があります。
この章では、2段階認証とアプリパスワードについて説明します。
Googleの2段階認証について説明します。
Gmailを含むGoogleのサービスにログインするには、ユーザー名とパスワードが必要です。
それらの内、ユーザー名(後ろに@gmail.comを付ければそのままGmailのアドレスになる)は、必要に応じて他人に公開するものなので、Googleアカウントの正規ユーザーだけが知っているのはパスワードのみとなります。そのため、パスワードが他人に知られたら、他人が正規ユーザーのふりをして、Googleのサービスを利用できることになります。(なりすまし)
仮に、色々なインターネット上のサービスのログインパスワードを、使いまわしていたとしたら、Googleのセキュリティが十分でも、他のサービスからパスワードが流出して、Googleのサービスを他人に使われてしまう可能性があります。また、生年月日などから、推測されやすいパスワードを使っている場合も、同様です。さらに、誰かにインターネットの通信を傍受されて、パスワード送信時に傍受されてしまう可能性もゼロではありません。このため、パスワードだけで十分なセキュリティを確保するのは難しいのです。
そこで、Googleのサービスを利用する場合は、SMS(ショートメッセージサービス)を用いた2段階認証を利用できる様になっています。2段階認証を使うと、ログインの手間が多少増えてしまうものの、パスワードだけでセキュリティを確保するよりも、安全にGoogleのサービスが利用できます。(図1参照)
注:全てのユーザーが2段階認証を利用する事を強要されている訳ではなく、2段階認証を使用するか、それとも、パスワードだけの認証をするかは、Googleアカウントで切り替える事ができます。2段階認証をするには、Googleに携帯電話の番号を教える必要がありますから、Googleに携帯電話の番号を知られたくない人は、パスワードのみによる認証を選択すればいいですし、Googleを信用して、携帯電話の番号を知られても良い人は、2段階認証を利用すると、より安全にGoogleのサービスを利用する事ができます。
2段階認証する場合は、パスワード以外に、Googleからショートメッセージで送られてきた数桁の数字を入力する事が求められます。
Googleにログインする度にショートメッセージの数字を入力するのは面倒なので、2段階認証するのは、新しいデバイスからGoogleにログインした場合などに限られます。
2段階認証をする場合は、ユーザー名とパスワードをログイン時に入力しなければならないだけではありません。ログイン時にGoogleから、乱数で決めた数桁の数字が書かれたショートメッセージが送られてきますから、その数桁の数字を正しく入力する必要があります。Googleに電話番号をあらかじめ通知してある携帯電話にショートメッセージが送られてきますが、その携帯電話は、正規のユーザーが持っているはずですから、パスワードを盗まれただけでは、第3者が正規ユーザーになりすましができないのです。
ただ、Googleのサービスを利用するたびに、2段階認証しなければならないのは面倒ですので、実際に2段階認証が必要になるのは、新しいデバイスからGoogleにログインする場合などに限られます。
Googleのアカウント(Gmailのアカウント)を作った時点では、2段階認証は無効になっています。ESP8266/ESP32からGmailのSMTPサーバーにアクセスするには、必ず2段階認証が必要ですから、2段階認証を有効にしていない人は、有効化する必要があります。
この節では、Googleアカウントの2段階認証をまだ有効化していない人向けに、有効化の方法を説明します。
まず、Googleアカウントにアクセスして、ログインしてください。そうすると、図2の様な画面になります。
次に、図2の赤丸で示す様に、セキュリティをクリックし、少しスクロールすると、2段階認証プロセスという項目があり、ここが2段階認証プロセスは無効になっていますという表示になっているはずです。(図3参照)
参考:2段階認証プロセスは無効になっていますではなく、〇〇〇〇/〇〇/〇〇より有効(〇は数字)という表示になっている場合は、既に2段階認証が有効になっていますので、これ以降説明する有効化の作業は不要です。
ここで、2段階認証プロセスは無効になっていますの表示の右側の>をクリックすると、図4の様に、本人確認の画面になります。
Googleアカウントのパスワードを入力して、本人確認してください。そうすると、図5の様な画面になります。
この画面で、電話番号を追加と書いてある青いボタンをクリックすると、図6の様な、電話番号の設定画面になります。
まず、国旗のマークが書いてあるドロップダウンリストで、日の丸の日本の国旗を選ぶと、+81 と、日本の国番号が入力された状態になります。
それに続けて、自分の電話番号を入力します。この時に、電話番号の最初の0を省略する点に注意してください。
固定電話の場合、市外局番を含めた電話番号は0で始まります。携帯電話の場合は、電話番号が070あるいは090で始まります。IP電話の場合は、電話番号が050で始まります。この様に、電話番号は必ず0で始まりますが、その最初の0を入力しないのです。
例えば、070-1234-5678という携帯電話の番号の場合は、70-1234-5678と入力します。(ハイフンは入力しないでも結構ですが、自動補間されます)
電話番号を入力した後で、次へと書かれたボタンをクリックすると、図7の様な、確認コードの入力画面になります。
携帯電話の番号を登録した場合は、SMSで確認コードが送られてくるので、それを入力して、確認ボタンをクリックしてください。そうすると、2段階認証が有効化され、図8に示す画面になります。
注意:固定電話の番号を登録した場合は、おそらく音声で確認コードを受け取る事になると思うのですが、未確認です。
パソコンやスマートフォン等の、画面とキーボード(または仮想キーボード)で双方向のデータのやり取りができ、かつ、ユーザーがデバイス(パソコンやスマートフォン等)の近くに必ずいる状態で使う機器の場合、ユーザー名とパスワードと2段階認証を組み合わせる事で、安全なログインが実現します。
この際の、ログインの処理の流れを、図9に示します。
しかし、ESP8266やESP32等のIoT機器の場合、図9の流れを実行するのは無理です。
画面とキーボードを使って、Googleのサーバーとユーザーが情報のやり取りをするのは無理ですし、例えば温度変化を自動収録する装置等の場合、装置が自動運転されるため、ユーザーがそもそも装置のそばにいません。
よって、2段階認証やCAPTCHA等によるセキュリティチェックを、Googleが行えないのです。
そこで使われるのがアプリパスワードです。アプリパスワードは、ブラウザなどで、Googleとユーザーが双方向に情報交換できない機器(例えばIoT機器)に、特別に発行されるパスワードです。
アプリパスワードは、特定のIoT機器などがGoogleのサービス(Gmail等)にログインする際のみに使われるパスワードで、ブラウザやスマートフォンのアプリで、ユーザーがGoogleのサービスにログインする時には使えません。
IoT機器とユーザーが使うパスワードを分ける事で、一方が流出してしまっても、被害の範囲が限定される仕組みになっています。
それでは、アプリパスワードを使える様にする設定について説明します。
まず、アプリパスワードの取得ページ(https://myaccount.google.com/apppasswords)に移動して、ログインしてください。この際、2段階認証が行われます。
ログインが終わると、図10の様な、アプリパスワードの設定画面になります。
ここで、アプリ名と書いてある入力欄に、何に使うアプリパスワードかを判別しやすい名称を入力してください。
ここでは、例としてESP32と入力して作成ボタンをクリックする事にします。
そうすると、図11に示す様に、16文字のアルファベットのアプリパスワードが、4文字ごとに区切られて、表示されます。
このアプリパスワードを、リスト1のMAIL_PASSWORD定数に設定すればOKです。(図12参照)
図11の画面で完了ボタンをクリックすると、図13の様な画面になります。
この様に、ESP32という名前のアプリパスワードが生成されているのが分かります。右側にゴミ箱のアイコンがありますが、ここをクリックすると、ESP32という名前のアプリパスワードを削除(無効化)する事ができます。削除処理後は、そのアプリパスワードではログインできなくなります。
なお、一旦生成したアプリパスワードは、生成時に表示される、図11の画面以外には表示されません。生成したアプリパスワードにできる処理は、削除だけで、再表示はできないのです。
万一、アプリパスワードが分からなくなった場合は、今まで使っていたアプリパスワードを破棄して、新しいアプリパスワードを生成する事ができます。新しいアプリパスワードを組み込んだプログラムをコンパイルして、使ってください。
アプリパスワードを使う機器の使用を止めた場合は、その機器に対応するアプリパスワードを削除してください。
今回説明した方法で発行したアプリパスワードを使うと、2段階認証なしにGoogleのサービスを利用できる様になるので、セキュリティレベルは少し下がってしまいますが、アプリパスワードが漏洩しない様に十分に注意していれば、アプリパスワードの発行時に2段階認証による本人確認を受けているので、2段階認証を受けたのと同様のセキュリティレベルを維持できます。
アプリパスワード使用時に、セキュリティレベルを下げないためには、発行されたアプリパスワードをメモ等に記録しない事が重要です。
リスト1のスケッチを使ってメールを送信するためにアプリパスワードを使う場合なら、リスト1のMAIL_PASSWORD定数をアプリパスワードに書き換えてコンパイルし、それをESP8266やESP32に書き込んだら、スケッチのソースファイルを直ちに消去して、自分にもアプリパスワードが分からない様にしてしまうのがいいでしょう。アプリパスワードを知っているのは、使用する機器とGoogleだけという状態にして、自分を含む誰もがアプリパスワードを知らない様にしてしまうと、一番セキュリティが確保できた状態になります。
注:それでも、第三者がESP8266(ESP32)に触れる環境では、ESP8266(ESP32)のフラッシュメモリからアプリパスワードを読み取られる危険は残ります。
もし、スケッチを書き換えるなどしてアプリパスワードが必要になったら、それまで使っていたアプリパスワードは削除して、新しいアプリパスワードを生成してください。
次のページでは、リスト1で使っているルート証明書の話をします。