nostr.directoryのTwitter認証バッジ

はじめに

前回の投稿「Nostrアカウントの認証(NIP-05)」の続きです。
今回はnostr.directoryTwitter 認証バッチを有効にした際の作業記録です。

最初に感想を述べると、なんかよく分からないけれどできたという感じです。

なので、ここで書かれている通りにやっても上手くいかない可能性があります
同じように困っている方がここで書かれていることを参考にして解決できるかもしれない、という程度の内容なので軽い気持ちでご覧いただければと思います。

とはいえ、もし間違えや誤解を招く記載があれば後で訂正しようと思っています。

作業記録

1. Twitter 上で指定された文言をツイート

nostr.directory のサイトを開くと[Tweet your nostr pubkey] と[Verify your pubkey on nostr] という2つのボタンがあります。

nostr.directory

[Tweet your nostr pubkey] ボタンをクリックしてTwitter 上で指定された内容のツイートをします。

詳しい手順は、前々回の投稿「Nostrアカウントの作成(Damus, Amethyst, snort.social)」のあとがき「nostr.directory」に記載してあります。

このツイートをした後にnostr.directory で自身のアカウントを検索してみると、検索結果にアカウントの情報が表示されるようになりました。(検索条件はTwitter のユーザー名かNostr アカウントの公開鍵を指定します)

nostr.directory > Account

この時はまだ、Twitter の認証バッジは灰色です。
このツイートは、この検索でアカウントを表示できるようにするためだけのもののようです。

Twitter アイコンの右上の(?)をクリックすると、認証バッジを有効する方法と思われる内容が表示されます。

nostr.directory > Twitter Verification ヘルプ

Twitter の検証

ユーザーは下記をする必要がある:

1. nostr.directoryのHPで示されたフォーマットに従って、自身のnostr公開鍵をツイートする

2. nostr.directoryのHPで示されたフォーマットに従って、nostrの公開鍵(1のような)を送信する

上記1. は当項目で実施したこと。2. は後述「3. Nostrアカウントで指定された文言をPost」でやることの認識です。

2. Nostrアカウントにリレーサーバを追加

Nostr のnostr.directory のアカウントが登録しているリレーサーバと自分のアカウントが登録しているリレーサーバを比較して、nostr.directory のアカウントの方にしか登録されていなかったwss://nostr-pub.wellorder.net を追加します。

これが本当に必要かは公式サイトに掲載されている訳ではないので実は必要ないかもしれませんが、何度か試しても上手くいかず、成功した時にこれを追加していたので書いておきます。

Damus > Relays (Before)
追加する前
Damus > Relays (Add)
追加
Damus > Relays (Added)
追加した後

Damus を使ってリレーサーバを追加しました。
画面はDamus の画面です。

3. Nostrアカウントで指定された文言をPost

Damus でPost

iPhone のDamus アプリを使ってPost します。

まず、ブラウザでnostr.directory のサイトを開きます。

nostr.directory > Verify

[Verify your pubkey on nostr] ボタンをクリックします。

nostr.directory > Verify (1)
nostr.directory > Verify (2)

iPhone が初代SE なので画面のレイアウトが窮屈で見づらいですが、”Twitter screen name” という入力欄にTwitter アカウントのユーザー名(先頭の@ を除く)を入力する(左の画像)と、右の画像のようにPublic Key の箇所が入力した内容に自動で置き換わるので、[Copy Verifrication Text] をタップしてクリップボードにコピーします。

Damus アプリを開いて、コピーを貼り付けてPost します。

Damus > Post
Damus > Posted

これで認証バッジにチェックが付くはずが暫く待っても灰色のまま。
どうしてよいか分からぬまま続けてブラウザ向けのNostr クライアントIris を使ってPost してみることにしました。

Iris でPost

ブラムザ向けのNostr クライアント Iris を使ってPost します。

ブラウザを使ってPost する文言を作る手順は同じなので省略します。
Iris でPost しました。

Iris > Posted
iris

上がIris のPost、下がDamus のPost。約1時間後にPost していました。

nostr.directory > Twitter (verified)
nostr.directory

Iris でPost してすぐにnostr.directory を見ると、緑色のチェックが付いていました。
DamusIris のPost のどちらが反映されたのか、Nostr クライアントの違いが影響しているのかなどよく分からないですが、とにかくTwitter 認証バッジが有効になりました。

あとがき

Nostr 関連の最初の投稿「Nostrアカウントの作成(Damus, Amethyst, snort.social)」の際に同じVerify のPost をしていたのですが反映されず、その時は諦めたのですが気になって再度チャレンジして何とかなりました。

これが有効になると、nostr.directory でTwitter のアカウントとnostr アカウントが紐づいていることを確認できることになるので、Twitter でつながっている知人のnostr アカウントを安心して特定できるようになる、という感じでしょうか。

とりあえず、認証バッジが全部灰色よりは見た目がいい感じになれてよかったです。

参照

Nostrアカウントの作成(Damus, Amethyst, snort.social)

はじめに

Twitter の共同創業者の一人、Jack Dorsey 氏がTwiiter でこのようなツイートをしました。

「オープンプロトコルに向けた1つのマイルストーン。Nostr がApple App Store にDamus を公開しました。Google Play Store はAmethyst 、Web 向けにはsnort.social (代表で1つ挙げると)があります」

知らないキーワードばかりだったので気になって調べてみました。

Nostr

Nostr の公式サイトにあった自己紹介文です。

A decentralized network based on cryptographic keypairs and that is not peer-to-peer, it is super simple and scalable and therefore has a chance of working.

“What is Nostr?” nostr.com

「Nostr は公開鍵暗号技術をベースにしたピアツーピアではない非中央集権的なネットワークで、非常にシンプルで拡張性があるのでうまく機能することが期待できます」

詳しいことはリンク先の下記ページに記載されていました。

書かれていることをざっくりと箇条書きしてみました。(かなり省略してます)

  • Nostr とは
    • 「Notes and Other Stuff Transmitted by Relays」の略
    • 検閲に強いグローバルな”ソーシャル”ネットワークを提供するプロトコル
    • 信頼できる中央のサーバに依存せず、P2P 技術にも依存していない
    • 暗号鍵と署名により改ざんに対する耐性がある
  • Nostr の構成
    • クライアントとリレーサーバで構成されている
    • クライアントはユーザが使う(ネイティブクライアントやWebクライアントなど様々な方法で使える)
    • リレーサーバは誰かが稼働させる
  • Nostr の仕組み(投稿はどのように処理されるかなど)
    • 書いた投稿は自分の鍵で署名して、誰かがホストしたリレーサーバを経由して送信される
    • 他の人の更新情報を得るためには複数のリレーサーバに問い合わせをして、投稿を受け入れているリレーサーバは転送のみを行う。クライアント側で署名を検証するのでリレーサーバの信頼性は問わない。
  • Twitter とMastodon の課題について
    • Twitter の課題を解決する代替手段のニーズがある:広告、ユーザを中毒にするために色々やってる、フォロワーの実際のフィードが表示されない、ban やシャドーban がある、スパムが多い
    • Mastodon の課題:第三者が管理するドメイン名にユーザID が付与されている、サーバの管理者はTwitter のようにユーザをban できる、etc.

更に詳しく知りたい場合は、Nostr のプロジェクトやリソースを集めたキュレーションリストのサイトを漁ってみるとよさそうです。

Damus, Amethyst, snort.social

この3つはいずれもNostr クライアントで、3つとも動作する環境が異なります。
ユーザは環境によって使うものを選ぶことになります。

いずれもNostr のクライアントという位置付けのものなので、作成した自身のNostr アカウントは異なる環境のクライアントでもログインして使うことができます。

デザインやUI はそれぞれ個性を出していますが、できることはTwitter やMastodon と同じような感じで、投稿やフォローをすることができ、タイムラインにフォローした人の投稿が流れます。
なので「ツイッターに代わる可能性があると発言する人もいる」のだそうです。

手順(作業の流れ)

実際にNostr クライアントを使ったNostr アカウントを作成から、他のNostr クライアントでログインできるかを確認した手順です。

今回はDamus でNostr アカウントを作成しましたが、他のNostr クライアントでもNostr アカウントを作成することはできるので、iOS 端末を持っていない方はAmethystsnort.social でNostr アカウントを作成して始めることができます。

(iPhone) DamusでNostrアカウント作成

iPhone を使って、App Store アプリでDamus を検索します。
使ったiPhone が初代SE のせいか、一部レイアウトが崩れている箇所がありますが無視してください。

  • Damus – App Store (Apple)
Damus > App Store

Damus アプリをインストールしたら開きます。

Damus > Create Account 1

Damus アプリが起動したら[Create Account] をタップします。

既にNostr アカウントを持っている場合は、[Login] からログインすることができます。今回はDamus アプリを使ってNostr アカウントを作成する手順なので、ログインについての解説は省略します。

Damus > Create Account 2
Damus > Create Account 3

EULA(使用許諾契約書)の内容を確認して[Accept] をタップします。

Damus > Create Account 4
Damus > Create Account 5

作成するアカウントのユーザ情報を入力して[Create] をタップします。

  • Username (必須)
    • 頭に@ がついて表示されるユーザ名
  • Display Name (任意)
    • ユーザの表示名。間にスペースを入れることができる。
  • About (任意)
    • 自己紹介文
  • Account ID
    • 自動で作番された公開鍵の文字列が表示されています(表示が途中で切れています)
Damus > Create Account 6
Damus > Create Account 7
Damus > Create Account 8

Welcome, Giant Rodent!” と表示されているので、このタイミングでアカウントは作成されているようです。

Public Key に表示されているnpub で始まる文字列が公開鍵です。
直前の画面では途切れていましたが、ここでは全体が表示されています。
この公開鍵は公開して使用する情報でユーザの識別に使われます。Twitter の自身のアカウントのプロフィール欄にこの公開鍵の文字列を掲載して、友人や知人がDamus で公開鍵を使ってアカウントを検索してフォローするというような使い方がされています。

公開鍵の左のアイコンをタップすると真ん中の画面の状態になります。
公開鍵はクリップボードにコピーされるので、必要に応じてパスワードマネージャーなどに保存します。

Private Key が表示されました。nsec で始まる秘密鍵の文字列が表示されています。(秘密鍵は非公開にする必要があるものなのでマスキングしています)
この秘密鍵はログイン時に使用する情報で、他人に知られないように秘密に管理する必要があります
実際にログインを試してみると、入力するのは秘密鍵のみでパスワードなど別の情報の入力は求められませんでした。誤ってTwitter のプロフィール欄に掲載すると第三者が自身のアカウントにログインしてなりすましの投稿などができてしまうので扱いには注意が必要です。別のデバイスでログインできたのでリスクベース認証はしていなそうです。

秘密鍵の左のアイコンをタップすると右の画面の状態になります。
秘密鍵はクリップボードにコピーされるので、パスワードマネージャーなどに保存しておきます。失念するとログインできなくなるので保存する必要があります

[Let’s go!] をタップします。

Damus > Posts & Replies
Damus > Posts

作成したアカウントのホーム画面が表示されました。
Posts & Replies にDamus アカウントの投稿と返信が表示されています。
Posts をタップすると、Damus アカウントの投稿が表示されています。
デフォルトでDamus アカウントをフォローしているのでDamus アカウントの投稿が表示されているようです。

これでNostr アカウントの作成が完了しました。

投稿してみる

右下にある[+] をタップして投稿してみます。

Damus > Post 1
Damus > Post 2
Damus > Post 3

投稿するメッセージを入力して[Post] をタップします。
投稿した後に左上のアイコンからプロフィール画面を見ると、投稿したメッセージが表示されていました。

ちなみに、Twitter では投稿をTweetと呼んでいましたが、Nostr ではPost と呼ぶみたいです。

フォローしてみる

Jack Dorsey のNostr アカウントをフォローしてみます。

Jack Dorsey がTwitter でNostr アカウントの公開鍵をツイートしていたのでこれをコピーして使います。

Damus > Account Follow 1
Damus > Account Follow 2
Damus > Account Follow 3

下の虫眼鏡アイコンをタップして表示された画面のSearch 欄にコピーした公開鍵を入力すると”Goto profile <公開鍵>” と表示されたのでタップします。
Jack Dorsey のアカウントの画面が表示されたので[Follow] をタップするとフォローできました。

(Android) Amethyst でログイン

Android スマホを使って、Play ストアでAmethyst を検索します。

  • Amethyst – Play ストア(Google)
Amethyst > Playストア

Amethyst アプリをインストールしたら開きます。

Amethyst > Login 1
Amethyst > Login 2

Amethst アプリが起動したら”nsec / npub / hex private key” にNostr アカウントの秘開鍵を入力し、”I accept the terms of use” をONにして[Login] をタップします。

Nostr アカウントを持っていない場合は、[Generate a new key] からNostr アカウントを作成することができます。(解説は省略)

Amethyst > Home > New Threads
Amethyst > Account

アカウントのホーム画面が表示されました。
New Threads にDamus アカウントの投稿と、先ほどDamus アプリで投稿した自分のアカウントの投稿が表示されています。
左上のアイコンをタップすると、Damus で作成したアカウントのUsername とDisplay Name が表示されています。

Damus で作成したNostr アカウントでAmethyst アプリにログインできました。

投稿してみる

右下にある[+] をタップして投稿をしてみます。

Amethyst > Post 1
Amethyst > Post 2
Amethyst > Post 3

投稿するメッセージを入力して[Post] をタップします。
New Threads に投稿したメッセージが表示されました。

(WebApp) snort.social でログイン

Web ブラウザを使ってsnort.social のページを開きます。
今回はMac のChrome を使いました。

snort.social > Login 1

右上の[Login] をクリックします。

snort.social > Login 2

Login ページが表示されたら”nsec / npub / nip-05 / hex private key…” にNostr アカウントの秘開鍵を入力し、[Login] をクリックします。

Nostr アカウントを持っていない場合は、[Generate Key] からNostr アカウントを作成することができます。(解説は省略)

snort.social > Posts

アカウントのホーム画面が表示されました。
Posts にDamus アカウントの投稿と、先ほどDamus とAmethyst アプリで投稿した自分のアカウントの投稿が表示されています。

続けて、右上のアイコンをクリックしてアカウントのページを表示します。

snort.social > Account

Damus で作成したアカウントのDisplay Name と公開鍵が表示されています。Display Name の右に”follows you” という文言があったので気になって調べてみると、デフォルトで自分自身をフォローしていました。違和感がありますが、とりあえず気にしないでおきます。

Damus で作成したNostr アカウントでsnort.social にログインできました。

ちなみに、このアカウントのページのURL は以下のようになっていました。

snort.social > Account (URL)

ドメイン名の右側にある長い文字列はアカウントの公開鍵の文字列になっていました。このように公開鍵は公開されたアカウントの識別子として使われています。

アカウントのプロフィール情報の登録

Damus アプリを使って、アカウントのプロフィール情報を登録します。

Damus > Posts
Damus > Account
Damus > Account > Profile

ホーム画面の左上にあるアイコンをタップして表示されたメニューのProfile をタップし、表示されたプロフィール画面の右上の[Edit] をタップします。

Damus > Account > Profile > Edit 1
Damus > Account > Profile > Edit 2
Damus > Account > Profile > Edit 3

YOUR NAMEUSERNAMEは登録済みなので、追加で下記の情報を入力して[Save] をタップします。

  • PROFILE PICTURE
    • アイコン画像のURL を指定します
    • Gravatar に登録しているアイコンのURL を指定しました
  • BANNER IMAGE
    • バナーの画像のURL を指定します
    • 自身のブログにアップロードしている画像のURL を指定しました
  • WEBSITE
    • ウェブサイトのURL を指定します
    • 自身のブログのURL を指定しました
  • ABOUT ME
    • 気の利いた自己紹介文が思いつかなかったのでとりあえず”カピバラ”
Damus > Account > Profile (Edited)
Damus

登録した内容が反映されました。

Amethyst アプリでも確認してみます。

Amethyst > Account > Profile (Edited)
Amethyst

snort.social も確認します。

snort.social > Account (Edited)
snort.social

Damus アプリで登録したプロフィール情報が他のクライアントでも反映されていました。
とりあえず、普通に使えそうな状態にはなりました。

あとがき

作成したNostr アカウント

わたし(GiantRodent)のNostr アカウントの公開鍵はこちらです。
フォローしてもらえたら嬉しいです。

npub1jn36rstx7nl2sku5suppnejxrh5jx2t08lj8x6eyc03rknqvg0jqgycpxe

GiantRodent の公開鍵
Nostr > QR code (GiantRodent)

鍵ペア(公開鍵/秘密鍵)について

鍵ペアの取得方法

Nostr の公式サイトでもアカウントを作成できました。ここではアカウントを作成するというより、生成された鍵ペアを取得するというUI になっていました。

この鍵ペアの方式が何か気になって調べてみると、vanity pubkeyvanity address と呼ばれているもので、好みのprefix やsuffix が付いた公開鍵の鍵ペアを自身で生成することができるようでした。
Edward Snowden の公開鍵のprefix “sn0wden” を見て真似したくなりましたが、生成する仕組みがBitcoin のマイニングのようにprefix やsuffix の桁数が多いほど計算コストがかかるのだそうで止めておきました。
下記のサイトの情報が参考になりました。ありがとうございました。

Nostr クライアントに公開鍵を使ってログインする

実は、公開鍵を使ってログインすることもできます。ただし閲覧専用で。
他人の公開されている公開鍵を使ってログインすると、あたかも他人のアカウントにログインしたかのような状態になります。何とも言えない仕様。

秘密鍵を安全に管理する

秘密鍵はNostr クライアントにログインする際にしか使わないので、秘密鍵は単体でユーザID とパスワードを兼ねたものと考えて扱えばよいかもしれません。

間違えて秘密鍵を第三者に提供したり公開することがないように、パスワードマネージャーには秘密鍵のみを保存して、公開鍵は保存しない方が安全に運用できる気がします。

公開鍵はユーザID として第三者に公開・提供する使い方をするので、ログイン以外の場所で公開鍵を入力するシーンがあったらDamus のProfile 画面からコピーするというルールを決めて運用すれば、間違えて秘密鍵を公開するというミスは防げそうです。

パスワードマネージャーに保存する際の名前

Damus, Amethyst はあくまでもNostr クライアントなので名前は「Nostr」にしました。
Damus でログインするのに”Nostr” を探すのは正直不便なので、複数のクライアントを使わないのであれば”Damus” のようにクライアントの名前にしもよいのかも。

なりすまし対策

NIP-05

アカウントが本人のものであることを認証する方法のようです。
自身が管理するWeb サーバ上に必要な設定をして、Nostr アカウントにそのWeb サーバの設定を指す情報を登録することで、認証バッジを表示させることができるようです。

nostr.directory

Twitter 上で他のユーザにNostr アカウントを持っていることを伝える方法として、Twitter のプロフィール欄にNostr の公開鍵を掲載したり、公開鍵をツイートする方法がありますが、それ以外の方法として、nostr.directory というサイトにNostr アカウントとTwitter アカウントが紐づいていることを登録することで、このサイトでTwitter のユーザ名を入力してそのユーザがNostr アカウントを持っているか確認できるようにすることができるようになります。

手順を掲載しておきます。簡単です。

nostr.directory

[Tweet your nostr pubkey] をクリックするとTwitter のツイートの入力フォームが所定の文言が入力された状態で開きます。

nostr.directory > tweet
nostr.directory > tweet (公開鍵貼り付け後)
公開鍵を貼り付け後

Paste your nostr public key here” という箇所をNostr アカウントの公開鍵に置き換えてツイートします。これで、nostr.directory のサイトで検索すると検索結果に表示されるようになります。

nostr.directory > Twitter Account

Badges が幾つか並んでいて、その中に前述のNIP-05 があるので、ここでもNostr アカウントがなりすましでないかを確認できるようになっています。

リレーサーバの選択について

Damus クライアントでNostr アカウントを作成したら、デフォルトで7つのリレーサーバが設定されていました。
削除や追加を乱暴にしているとアカウントのプロフィール情報や投稿が消えてしまいそうなので、少し仕組みを調べてから変更してみようと思います。

Damus > Account > Relays
Damus > Relays(default)

さいごに

Jack Dorsey といえば分散型SNS「Bluesky」を開発中であることを発表していたので、今回の発表はそれのことか?と思ったら別のものでした。
Bluesky もベータ版のウェイトリストの募集を始めてから3ヶ月ほど経っているので、そろそろ新しい動きがないか気になるところです。

参照

YubiKeyのOATHをCLIで扱う

はじめに

前回の投稿「Yubico Authenticator 6」ではYubiKey 5OATH 機能をYubico 社の認証アプリYubico Authenticator を使って操作しましたが、今回はYubiKey ManagerCLIツール (ykmanコマンド) を使って操作してみたのでその解説をします。

ykman コマンドの引数にTwitter のQR コードの値 “otpath://totp/Twitter:@RodentGiant?secret=xxxxx&issuer=Twitter” を指定してYubiKey にアカウントを登録して認証コードを発行する、というようなことの解説です。

扱うコマンドはCLI ツールのOATH コマンドで、Yubico 社の公式サイトにマニュアルが掲載されています。

YubiKey のOATH 機能について

前回の投稿「Yubico Authenticator 6」で解説していたので省略。

YubiKey Manager について

Yubico 社が提供するYubiKey Manager には、ウィンドウ操作のGUI ツールと、コマンドライン操作のCLI ツール の2種類のツールがあります。
今回の投稿はコマンドライン操作のCLI ツールを使った解説になります。

GUI ツールについては、過去の投稿「MacにYubiKey Managerをインストール」で解説しているので興味がある方はご参照ください。
なお、GUI ツールはYubiKey のOATH 機能を操作する機能を備えていないです。

環境について

今回の解説で使う環境です。

  • OS:macOS Monterey
  • YubiKey Manager CLI (ver 5.0.0)
  • YubiKey 5 NFC

インストール(CLIツール)

Yubico 社の公式サイトからCLI ツールのパッケージファイルをダウンロードしてインストールすることができますが、GUI ツールにはCLI ツールも同梱されているので、GUI ツールをインストールしてCLI ツールを使うことも可能です。

  • YubiKey Manager (CLIツール)のパッケージファイル
    • インストールすると自動でパス指定される
    • CLI ツールのバージョンが最新(ver. 5.0.0)
  • YubiKey Manager (GUIツール)のパッケージファイル
    • CLI ツールが同梱されている(パス指定が必要)
    • CLI ツールのバージョンが最新ではない(ver. 4.0.7)

ただ、2022年12月23日時点ではありますが、GUI ツールに同梱されているCLI ツールは最新のver.5.0.0 ではないので、最新を使いたい場合はCLI ツールを単体でインストールする必要があります。

もし、GUI ツールと最新のCLI ツールの両方を使いたい場合は、GUI ツールに同梱されているCLI ツールはパス指定が自動で行われないので、両方とも単純にインストールするだけで最新のCLI ツールが使える状態になります。

なお、macOS ユーザーの場合は、Homebrew を使ってCLI ツールをインストールすることもできます。こちらは最新のバージョン(ver. 5.0.0)になっていました。

各リンク先を貼っておきます。

各種環境のインストール方法が掲載されているYuboco 社のページが参考になりそうなのでリンクを貼っておきます。

Homebrew を使ってインストール

今回、Homebrew を使ってCLIツールのみをインストールします。

ターミナルで下記のコマンドを実行してインストールします。

brew install ykman

インストール後にykman コマンドに既にパスが通っていることを確認します。バージョンは5.0.0 です。

% which ykman
/opt/homebrew/bin/ykman

% ykman -v
YubiKey Manager (ykman) version: 5.0.0

OATH 機能を使う(アカウントの登録〜認証コードの生成)

CLI ツールを使ったアカウントの登録は、2要素認証を登録するサービス側が表示するQR コードの情報を使って行います。

例として、Twitter とGoogle で表示されたQR コードのページとQR コードの情報(QR コードをスキャンして読み取ったURI)を載せておきます。

Twitter

Twitter > QRコード
QRコード
Twitter > shared secret
shared secret
otpauth://totp/Twitter:@RodentGiant?secret=ABCDEFGHIJKLMNOP&issuer=Twitter

“Can’t scan the QR code?” をクリックするとshared secret が表示されたページが表示されました。

Google

Google > QRコード
QRコード
Google > shared secret
shared secret
otpauth://totp/Google:[email protected]?secret=abcdefghijklmnopqrstuvwxyz012345&issuer=Google

“スキャンできない場合” をクリックするとshared secret が表示されたページが表示されました。

アカウントの登録(URI を指定する)

QR コードをスキャンして読み取ったURI をそのまま指定して登録します。

ykman oath accounts uri "otpauth://totp/Twitter:@RodentGiant?secret=ABCDEFGHIJKLMNOP&issuer=Twitter"

認証コードの発行にYubiKey のタッチを要求するようにする場合は-t オプションを指定します。

ykman oath accounts uri -t "otpauth://totp/Twitter:@RodentGiant?secret=ABCDEFGHIJKLMNOP&issuer=Twitter"

アカウントの登録(shared secret を指定する)

shared secret を指定して登録します。

Twitter とGoogle では前述のQR コードを表示するページからリンクできるページでshared secret を確認することができます。
また、URI のクエリパラメータsecret の値がshared secret なので、URI で確認することもできます。

URI に含まれる要素を分解してshared secret 以外のオプションを指定するので、オプションの意味が分かりやすいように、ハイフン2つのオプションも併記しておきます。

ykman oath accounts add -i Twitter -o TOTP @RodentGiant ABCDEFGHIJKLMNOP
ykman oath accounts add --issuer Twitter --oath-type TOTP @RodentGiant ABCDEFGHIJKLMNOP

認証コードの発行にYubiKey のタッチを要求するようにする場合は-t オプションを指定します

ykman oath accounts add -i Twitter -o TOTP -t @RodentGiant ABCDEFGHIJKLMNOP

アカウント情報の一覧を表示

YubiKey に登録されているアカウントの情報を一覧で表示します。

% ykman oath accounts list -H -o -P
% ykman oath accounts list --show-hidden --oath-type --period
Twitter:@RodentGiant, TOTP, 30

-H オプションは非表示アカウントを表示するためのもののようですが、そもそも非表示アカウントが何か調べても分かりませんでした。-H オプションは指定しなくても結果は変わらなかったので、指定する必要ないのかもしれません。

認証コードの生成

アカウントを絞り込む条件を指定しないでコマンドを実行します。

% ykman oath accounts code
Google:RodentGiant    [Requires Touch]
Twitter:@RodentGiant            001542

アカウントが2つ登録されている場合、上記のように出力されます。

出力されるアカウントが2つ以上ある場合、アカウントの登録時に-t オプションを指定したアカウントは[Requires Touch] と表示されます。

-tオプションを指定したアカウントの認証コードの発行

アカウント登録時に-t オプションを指定したアカウントの認証コードを発行するためには、1つのアカウントのみ出力されるようにする必要があります。
YubiKey に複数のアカウントが登録されている場合は、アカウントを絞り込む条件(部分一致)を指定します。

% ykman oath accounts code Google:RodentGiant
Touch your YubiKey...
Google:RodentGiant  302862

2行目でYubiKey のタッチが要求され、タッチすると3行目の抽出したアカウントのアカウント名と認証コードが表示されます。

認証コードのみ出力する

-s オプションを指定して認証コードのみ出力することもできます。
この場合も、1つのアカウントのみ出力されるようにする必要があります。

% ykman oath accounts code -s Twitter:@RodentGiant
% ykman oath accounts code --single Twitter:@RodentGiant
001542

OATH 機能を使う(アカウントの管理)

アカウントの名前変更

% ykman oath accounts rename Twitter:@RodentGiant "Twitter:RenamedName"
Rename account: Twitter:@RodentGiant ? [y/N]: y
Renamed Twitter:@RodentGiant to Twitter:RenamedName.

アカウントにissuer を設定していた場合、変更後の名前の左に”:”(セミコロン)を付けてissuer を指定しないとissuer が削除されます。
上記例では”Twitter” がissuer 、”RenamedName” が変更後のアカウント名です。

アカウントの削除

% ykman oath accounts delete Twitter:@RodentGiant
Delete account: Twitter:@RodentGiant ? [y/N]: y
Deleted Twitter:@RodentGiant.

サービス側の2要素認証の設定も削除する必要があるので注意が必要です。
削除する順番を(1)サービス側の2要素認証の設定を削除、(2)YubiKey 側のアカウントを削除、とすればログイン時にサービス側から2要素認証の認証コードの入力を求められるけれど発行できないという状況は回避できるでしょう。

OATH 機能を使う(パスワード関連)

前回の投稿「Yubico Authenticator 6」のあとがき「YubiKey の紛失や窃取によるアカウント情報の漏洩」で少し解説していますが、YubiKey のOATH 機能にパスワードを設定することができます。
YubiKey を不正に入手した第三者への、YubiKey に登録されているアカウント情報の漏洩と、認証コードの発行を防ぐことができるので、安全のためにはパスワードは設定しておいた方がよさそうです。

なお、これまでの例示したコマンドはパスワードが設定されていない例になります。
パスワードが設定されていると、コマンドを実行する度にパスワードの入力が求められるようになります
アカウント情報の一覧を表示するコマンドの場合、下記のようになります。

% ykman oath accounts list -H -o -P
Enter the password:

-p オプションでコマンドにパスワードの文字列を付加することで、「Enter the password:」を表示しないで結果を得ることができますが、ターミナルに実行したコマンドの記録が残るのは望ましくないと思うので個人的には使わないようにしています。

% ykman oath accounts list -H -o -P -p 123456
Twitter:@RodentGiant, TOTP, 30

パスワードの設定(初期登録・変更)

YubiKey のOATH 機能は、初期状態ではパスワードが設定されていないです。
パスワードを初期登録する場合と、初期登録後に変更する場合で使うコマンドは同じです。

% ykman oath access change
Enter the new password:
Repeat for confirmation:
Password updated.

パスワードの削除

YubiKey のOATH 機能に設定されているパスワードを削除します。削除するとコマンドの実行時にパスワードの入力を求められなくなります。

% ykman oath access change -c
Enter the current password:
Password cleared from YubiKey.

パソコンにパスワードを記憶

パスワードをパソコンに記憶させておくことにより、コマンドを実行する度にパスワードの入力が求められないようにすることができます。
裏で記憶しておいたパスワードが自動入力される感じです。

% ykman oath access remember
Enter the password:
Password remembered.

一度、このコマンドを実行しておけば、同じパソコンであればパソコンを再起動しても記憶された状態が保たれます。
仕組みとしては、~/.ykman/oath.json というファイルに記憶されるようです。

パソコンに記憶したパスワードを削除

パソコンに記憶されているパスワードを削除します。削除した場合、YubiKey のOATH 機能のパスワードが設定されたままだと、コマンドの実行時にパスワードの入力が求められるようになります。

% ykman oath access forget
Password forgotten.

YubiKey のOATH 機能のパスワードの変更や削除をした場合、パソコンに記憶したパスワードは使えなくなるので、パソコンに新しいパスワードを記憶するか、このコマンドでパソコンに記憶されているパスワードを削除します。

あとがき

YubiKey のOATH 機能のパスワード設定について

  • YubiKey 紛失時の備えとして、パスワードは設定しておいた方がよさそう
  • コマンドを入力する度にパスワードを入力するのは面倒なので、パソコンに記憶させる機能は使った方がよい
  • 設定したパスワードを失念すると、パスワードの変更も削除もできなくなる
    • YubiKey に登録したアカウントの認証コードが発行できなくなる
    • YubiKey のOATH をリセットするしかない
    • パスワードはパスワードマネージャーに登録しておいた方がよい

Yubico Authenticator を使えば良いのでは?

YubiKey のOATH 機能は、Yubico Authenticator であればGUI で操作できるので、一般的な用途ではCLI ツールを使う必要がなさそう。
ざっと見た感じ、CLI ツールでできることはすべてYubico Authenticator でできると思われる。

サーバ側で認証コードを発行する仕組みを作るのにCLI ツールを使うにしても、YubiKey 5 のOATH 機能を使う場合、YubiKey 5 のOATH に登録できるOATH-TOTP の上限が32 なので、用途としては向いていなそう。

参照

Yubico Authenticator 6

Yubico 社が Yubico Authenticator 6 の正式版をリリースしました。

ユーザーのクレデンシャルをYubiKey に保存するというのが特徴の認証アプリの使用感がどのようなものか試してみたので、その解説をします。

はじめに

Yubico Authenticator について

いわゆる、2要素認証でユーザIDとパスワードを入力した後に入力する認証コードなどと呼ばれるワンタイムパスワード(OTP)を生成する認証アプリです。

認証アプリとして有名なものに、Google AuthenticatorAuthyMicrosoft Authenticator などがありますが、これらと同じことができるアプリです。

Yubico 社のサイトに、Yubico Authenticator の特徴として以下のような点が挙げられていました。

  • ユーザーのクレデンシャルをモバイル端末ではなくYubiKey内のセキュアエレメントに保存するので、クレデンシャルの漏洩を完全に防ぐことができる
  • YubiKey に保存したクレデンシャルは複数のデバイスでシームレスに利用することができる
  • アプリはWindows, macOS, Linux, iOS, Android で動作するので、パソコンでもモバイル端末でも同じ認証コードを取得できる(ARM 版macOS もサポート)

先ほど例示した認証アプリはスマホにインストールした認証アプリ単体で認証コードを発行しますが、Yubico Authenticator は認証アプリをインストールしたスマホやパソコンにYubiKey をNFT やUSB で接続して認証コードを発行します。

認証コードの発行はYubiKey のOATH-TOTH/TOTP 機能を使って行われるので、この機能を備えたYubiKey 5 シリーズが必要となります。(例えばSecurity Key シリーズは対応していない)

YubiKey のOATH-HOTP/TOTP 機能

YubiKey 5 シリーズには、YubiKey 本体にFIDO2 やPIV(Smart Card) など色々な機能がありますが、このYubico Authenticator はYubiKey のOATH(HOTP/TOTP)の機能を使ってOTP を発行しているようです。

OATH には下記の2つの方式がありますが、今回試すTwitterOATH-TOTP のみ対応しているようです。

  • OATH-HOTP
    • HMAC-based OTP
    • OTP の発行回数を使ってOTP を生成する
    • 生成したOTP を認証に使わなかった場合、サーバーの発行回数と同期がとれなくなる
  • OATH-TOTP
    • Time-based OTP
    • 接続したデバイスの現在時刻を使って6〜8桁の数字のOTP を生成する
    • 30秒ごとにOTP が変わる

Google Authenticator、Authy、Duo Mobile、1Passwordなど、どの時間ベースのワンタイムパスワード(TOTP)認証アプリでも使えます

Twitter ヘルプセンター

インストール

Yubico Authenticator のページにOS ごとのインストーラへのリンクがあります。

Yubico Authenticator > Install

今回、Mac とAndroid にインストールしました。

Mac

Mac(macOS)には、下記の2つのインストールする方法が用意されています。

  • AppStore からダウンロード
  • Yubico の公式サイトからdmg ファイルをダウンロード

今回、後者の方法でインストールすることにしました。
※ Homebrew にはなかった
※ 手順は特筆することがないので省略

Android

Google Play を使ってインストールします。
※ 手順は特筆することがないので省略

Yubico Authenticator > Android > Install

使ってみる(Mac)

Launchpad にあるアイコンをクリックしてYubico Auhenticator を起動します。

Yubico Authenticator アイコン (Mac)

Yubico Authenticator のウィンドウが表示されます。
縦長のスマホの画面のようなウィンドウです。

Yubico Authenticator (Dark mode)
Dark mode
Yubico Authenticator (Light mode)
Light mode

Dark modeLight mode の切り替えは、左上の[≡] > Settings > Appearance からできます。

Insert your YubiKey” と表示されているので、パソコン(Mac) のUSBポートにYubiKey を差し込みます。

YubiKey Authenticator (アカウント未登録)

右上のアイコンが差し込んだYubiKey のアイコンに変わり、中央の文言が”No accounts” に変わりました。
このYubiKey のOATH にはアカウントが何も登録されていないです。

ここで一旦、初回のみ行う作業の解説をします。
このアプリは、アカウントを追加する際にブラウザのページ上に表示されるQR コードをスクリーンショットで読み込むので、そのための権限を許可する必要があります。
以下、その手順です。

右上のYubiKey のアイコンをクリックするとメニューが表示されます。

Yubico Authenticator > Authenticator > menu

[Add account] をクリックします。

Yubico Authenticator > Authenticator > Add account

[Scan QR code] をクリックすると、下記のウィンドウが表示されます。

Yubico Authenticator > Macの初期設定

画面収録の許可を求められるので、[“システム環境設定”を開く] をクリックしてシステム環境設定を表示し、セキュリティとプライバシー > プライバシー > 画面収録 のYubico Authenticator.app のチェックをON にします。

初回のみ行う作業は以上です。

アカウントの追加

今回、Twitter アカウントに2要素認証の登録をします。
ブラウザを開き、2要素認証を登録するTwitter アカウントでTwitter にログインし、下記の操作で2要素認証のページを表示します。

  1. サイドメニューの[もっと見る] を開き、[設定とサポート] > [設定とプライバシー] をクリック
  2. [セキュリティとアカウントアクセス] > [セキュリティ] > [2要素認証] をクリック
Twitter > 2要素認証
※ イメージはセキュリティキーが既に設定されていた状態

[認証アプリ] のチェックボックスをクリックします。

Twitter > 2要素認証 1

[はじめる] をクリックします。

Twitter > 2要素認証 2

QR コードが表示されました。

Yubico Authenticator を起動し、右上のYubiKey のアイコンをクリックして表示されるメニューの[Add account] をクリックします。

Yubico Authenticator > Authenticator > Add account 1

下記イメージのようにブラウザ上のQR コードYubico Authenticator アプリの両方が画面に表示された状態にします。

Yubico Authenticator > Authenticator > Add account 2

[Scan QR code] をクリックします。

Yubico Authenticator > Authenticator > Add account 3

値が自動入力され、ボタンが[Scanned QR code] に変わりました。
Issuer とAccount name は変更することができます。
下にあるボタンは、[Require touch] 以外は変更できない状態になりました。

[Require touch] はON/OFF の切り替えができ、ON にすると認証コードの発行にYubiKey のタッチが要求されるようになります。(デフォルトはOFF)

右上の[Save] をクリックして保存します。

Yubico Authenticator > アカウント(Require touch:OFF)
[Require touch] OFF
Yubico Authenticator > アカウント(Require touch:ON)
[Require touch] ON

先ほど、”No accounts” と表示されていた画面にTwitter アカウントが表示されるようになりました。

  • [Require touch] をOFF にすると認証コードが表示されます。認証コードは30秒ごとに別のコードに自動で変わるので、常に最新のコードが表示されます
  • [Require touch] をON にすると認証コードが表示されず、タッチのアイコンが表示されます

[Require touch] をON にしていた場合、アカウントをクリックします。

Yubico Authenticator > Require touch 1

“Touch Required” と表示されると同時に、接続しているYubiKey 本体が点滅し始めるので、YubiKey を指でタッチします。

Yubico Authenticator > Require touch 2

認証コードが表示されました。

Yubico Authenticator > Require touch 3

認証コードは30秒ごとに変わるので、30秒経過すると表示されていた認証コードが灰色になり、クリップボードにコピーする一番左のアイコンは無効になりました。

再度認証コードを発行する場合は左から2つ目のアイコン「↻」をクリックすると”Touch Required” の状態になるので、再度YubiKey をタッチして発行することができます。

この時点ではYubico Authenticator (YubiKey)側のアカウント登録しかできていないので、Twitter の2要素認証を有効にするためにブラウザに戻ります。

ブラウザに戻ったら、QR コードの下にある[次へ] をクリックします。

Yubico Authenticator > Authenticator > Add account 4

認証コードの入力が求められるので、Yubico Authenticator に表示されている認証コードを入力し、[確認] をクリックします。

Yubico Authenticator > Authenticator > Add account 5

これでTwitter の2要素認証が有効になりました。

上の画像の赤枠の箇所にバックアップコードが表示されています。
バックアップコードは、ログイン時の2要素認証で使うことができる使い捨てのコード(12桁の英数字)で、万が一YubiKey を紛失した場合に代替手段として使うことができるので、どこか安全な場所に保管しておくことをお勧めします。

Yubico Authenticator を使った2要素認証のログイン

パソコンのブラウザでTwitter にログインします。
Yubico Authenticator が発行する認証コードを使ってログインできるか確認します。

Yubico Authenticator > Twitter ログイン 1

電話番号/メールアドレス/ユーザー名 を入力して[次へ] をクリックします。

Yubico Authenticator > Twitter ログイン 2

パスワードを入力して[ログイン] をクリックします。

Yubico Authenticator > Twitter ログイン 3
Chrome の小ウィンドウ

[キャンセル] をクリックします。

Yubico Authenticator > Twitter ログイン 4

[コード表示アプリを使用] を選択し、[次へ] をクリックします。

Yubico Authenticator > Twitter ログイン 5

認証コードの入力が求められるので、Yubico Authenticator アプリに表示されている認証コードを入力し、[次へ] をクリックするとログインが成功しました。

使ってみる(Android)

アプリのアイコンをクリックしてYubico Auhenticator を起動します。

Yubico Authenticator アイコン (Android)

Yubico Authenticator のウィンドウが表示されます。

スクリーンショットが禁止されているようで、キャプチャした画像は画面が黒い状態でした。残念ながらここからはイメージなしの解説になります。

Android 版は画面のレイアウトやできることがパソコン版と基本的に同じだったので、パソコン版との違いを確認できた範囲で解説します。

Yubico Authenticator 起動直後の状態

  • パソコン版
    • “Insert your YubiKey” と表示される
  • Android 版
    • Insert or tap your YubiKey” と表示される

Android 版は、USBポートへのYubiKey の物理的な差し込みに加え、YubiKey をかざしてNFC 接続することができます。

参考まで、Pixel でYubiKey をかざす際のかざす位置(NFC チップがある場所)が分かるリンクを貼っておきます。

アカウントの追加

  • パソコン版
    • USB ポートにYubiKey を差し込まないと、右上の”Add account” を含めたメニューが表示されない
  • Android 版
    • YubiKey と接続(*1) すると、右上の”Add account” を含めたメニューがパソコン版と同じように表示される
    • YubiKey と接続(*1) せずに右上のアイコンをクリックすると、カメラが起動してQR コードをスキャンする状態になる。
      このままQR コードをスキャンするとパソコン版と同じように値が自動入力され、[Save] をタップすると”Tap your key” と表示されるので、このタイミングでYubiKey と接続するとアカウントが保存される
    • つまり、YubiKey の接続はQR コードを読み込む前でも後でもよい

(*1) USBポートへのYubiKey の物理的な差し込み、YubiKey をかざしたNFC 接続

Yubico Authenticator で認証コードを発行

“Require touch” をOFF にして登録したアカウントの認証コードをAndroid 版YubiKey をかざしてNFC 接続する場合だけ、特徴的な違いがありました。

“Require touch” OFF“Require touch”ON
パソコンUSB常に最新のコードが表示されるYubiKey をタッチした時のコードが表示され、
30秒過ぎたら再度タッチして再発行
AndroidUSB同上同上
AndroidNFCYubiKey をかざした時のコードが表示され、
30秒過ぎたら再度かざして再発行
YubiKey をかざした時のコードが表示され、
30秒過ぎたら再度かざして再発行

当然ではありますが、認証コードの発行はYubiKey が行うので、常時接続しているUSB と違いNFC の場合は、新しい認証コードを発行するために30秒過ぎる度にスマホにYubiKey をかざす必要があります。

あとがき

複数のデバイスでシームレスに利用できる

YubiKey に登録した同じアカウントで、パソコンとAndroid のYubico Authenticator が発行する認証コードを使って2要素認証のログインができるかをそれぞれ試したら問題なくできた。

YubiKey が手元にあればどの端末でもYubico Authenticator をインストールするだけで認証コードを発行できるので、パソコンやスマホの機種変更の際は、新しい端末にYubico Authenticator をインストールするだけでよいということになる。
つまり、端末の機種変更の際はアカウント情報の移行やユーザ認証等は不要。

YubiKey の紛失や窃取によるアカウント情報の漏洩

YubiKey を入手した第三者に、YubiKey に登録されているアカウントのサービス名とそれに紐づくユーザID、2要素認証の認証コードが伝わってしまうと、残りのパスワードが特定されると不正ログインを許すことになる。
パスワードの使い回しをしていた場合、どこかのサービスで同じユーザIDとパスワードの組みが漏洩していると、その第三者が漏洩したリストを入手してパスワードを特定することが可能になる。

前述「アカウントの追加」で記載したように、QRコードを読み込むとIssuer(サービス名) とAccount Name(ユーザID) が自動入力されるので、それらの情報と認証コードがYubico Authenticator がインストールされた第三者の端末にYubiKey を接続するだけで表示されてしまっては、上記のようなアカウント情報の漏洩が起きてしまうことになる。
それを防ぐ方法は、下記の2つがある。

  • YubiKey にアカウントを追加する際に、QRコードを読み込んで自動入力されたIssuer とAccount Name を変更してから登録する(登録後の変更も可能)
  • YubiKey のOATH 機能にパスワードを設定する
    • Yubico Authenticator の右上のYubiKey のアイコンをクリックして表示されるメニューの[Set password] からパスワードを設定できる
    • パスワードを設定しておくと、端末にYubiKey を接続するとYubico Authenticator からパスワードの入力を求められるようになる

推奨は後者のパスワード設定。設定したパスワードは1Password などのパスワードマネージャに登録しておけばよい。
もしパスワードを忘れた場合は、OATH をリセットするしかない。

前者はアカウントを追加する際に変更し忘れる可能性があるのと、アカウント名を変更することで使い勝手が悪くなるので運用上無理がありそう。

セキュリティキー(FIDO)を使った2要素認証との使い分け

サービス側がセキュリティキー(FIDO)に対応しているのであれば、フィッシング攻撃に耐性のあるセキュリティキー(FIDO)を有効にしておき、メインの2要素認証として使うようにしておけば最強ともいえるセキュアな状態にすることができる。

この場合、同じYubiKey でTOTP を使った認証コードの設定をする意味は全くなさそう。むしろ下手に設定することで前述したような不正ログインのリスクを作ることになりかねない。

認証アプリの種類と使い分け

サービス側がセキュリティキー(FIDO)に対応していないが、TOTP を使った認証コードに対応している場合は、フィッシング攻撃に耐性がないがTOTP を使った認証コードを有効にしておくことで、パスワード認証のみよりはセキュアな状態にすることができる。

どの認証アプリを使うかの選択は、利便性を含めて使う側の好みにもよるので、ざっくりとした比較だけしておく。

クレデンシャルの保存場所と
認証コードの発行
クレデンシャルの
サーバへの保存
認証アプリ
認証アプリ保存されないGoogle Authenticator、Microsoft Authenticator
同上保存されるAuthy、1Password
YubiKey (OATH)Yubico Authenticator

パソコンのYubico Authenticator をメインで使う

YubiKey 5 NanoYubikey 5C Nano であれば、パソコンに常時接続しておくと邪魔にならずに便利そう。
ただ、コンパクトであることが仇になりかねないので、ログインしようとしたらYubiKey が無くなっていることに気づいたということが起きかねない環境でパソコンを使う際は要注意。

スマホのYubico Authenticator をメインで使う

YubiKey 5 NFCYubiKey 5C NFC などNFC を搭載したYubiKey の方が便利そう。
Android とUSB 接続して使えることを今回確認したが、普段そのような使い方はしないと思う。

YubiKey Manager command line tool (ykman)

Yubico Authenticator 6 のリリースについてYubico 社が公開したブログより抜粋。

To support this new app we also needed to improve the library aspects of ykman, which resulted in the release of ykman 5.0.

デスクトップ版 のYubico Authenticator は、YubiKey Manager command line tool (ykman) をライブラリと使っていて、今回の対応でykman 5.0 をリリースすることになったとのこと。
ykman 5.0 では、ykman コマンドでpython のスクリプトを実行してYubiKey を設定できるのだとか。

ykman 5.0 のことが気になったので、YubiKey Manager (GUI版) をインストールした際に同梱されていた現在使っているバージョンを確認。

% which ykman
/Applications/YubiKey Manager.app/Contents/MacOS/ykman

% ykman -v
YubiKey Manager (ykman) version: 4.0.7

このYubiKey Manager (GUI版) は最新版だったので、ykman 5.0 が同梱されているバージョンはまだ公開されていなかった。

Yubico Authenticator をインストール後にYubico Authenticator.app 内を探してみたけれど、ykman は見つからず。Yubico Authenticator にはykman は同梱されていなかった。

GitHub にはykman 5.0 があったので、使いたい場合は個別にインストールする必要があるみたい。
Homebrew のykman は5.0 になっていたので、Mac ユーザであればこちらも利用可能。

ykman 5.0 のインストールは保留にして、とりあえず現在のykman 4.07 でOATH に登録したTwitter のアカウントを確認するコマンドを実行してみた。

% ykman oath accounts list -H -o -P
Twitter:@RodentGiant, TOTP, 30

他にもアカウント登録など色々なオプションがあるので気になるけれど、収拾つかなくなりそうなのでとりあえず今回はここまでとする。

参照

YubiKeyを使ったSSH公開鍵認証(FIDO)

はじめに

YubiKey を使ってSSHをセキュアにする方法がYubico の公式サイトに掲載されていました。

簡単に整理すると下記のようなことができるようです。

  • SSHの公開鍵認証 - クライアント側にYubiKey を挿す
    • PIV(Smart Card)※PKCS #11
    • PGP
    • FIDO2 ※OpenSSH 8.2 のFIDO ハードウェア認証機能を使う
  • SSHサーバの2要素認証の実装 - サーバ側にYubiKey を挿す
    • OTP

この中のFIDO2 を使ったSSHの公開鍵認証を試してみたので、その手順などを解説します。

FIDO2 を使ったSSHの公開鍵認証

  • OpenSSH 8.2p1(2020.2.14リリース) でFIDO ハードウェア認証がサポートされた
  • YubiKey 5 などのFIDOデバイスは、OpenSSH に追加された公開鍵暗号方式“ecdsa-sk” と “ed25519-sk” にサポートされている

つまり、ssh-keygen の-t オプションで“ecdsa-sk” または “ed25519-sk” を指定すると、FIDOトークンに紐づいた鍵を生成することができ、その後パソコンにFIDOデバイスが接続されていれば、他の公開鍵暗号方式の鍵と同じように、SSHサーバに接続することができます。
YubiKey の場合、SSHサーバへの接続時にユーザーにYubiKey のタッチを求めて、タッチしたことをユーザーが接続を明示的に許可したこととして扱うようになっています。

だからどう安全なのかというと、第三者が鍵だけを窃取しても、鍵と紐づいているYubiKey が物理的に手元にないと、鍵を窃取した第三者はSSHサーバに接続することはできない、ということになります。

環境

クライアント側の環境

  • MacBook Pro 2022(macOS Monterey 12.4)
  • OpenSSH client
    • macOSにバンドルでインストール (8.6p1)
    • Homebrew でインストール(9.0p1) ※当手順に記載
  • YubiKey Manager
    • GUIツール (1.2.4)
    • CLIツール (4.0.7)
  • YubiKey 5 NFC(Firmware 5.4.3)

サーバ側の環境

  • Ubuntu 20.04.4 LTS
  • OpenSSH server 8.2p1

YubiKey の初期設定

1. YubiKey のFIDO2 のPINを登録

出荷時の状態のYubiKey にはFIDO2 のPIN が登録されていないので、YubiKey Manager を使って登録します。
YubiKey Manager にはGUIツールとCLIツールの2つありますが、どちらを使ってもPIN の登録ができます。
ちなみに、PIN を登録しないと、CLIツール のFIDO 関連のコマンドが下記のように機能してくれませんでした。(コマンドの実行にPIN の入力が必要な2つ目と3つ目のコマンドがエラーになってる)

% ykman fido info
PIN is not set.

% ykman fido access verify-pin
Error: This feature requires having a PIN. Set a PIN first.

% ykman fido credentials list
Error: Credential Management requires having a PIN. Set a PIN first.

ここでは、GUIツール を使ってFIDO2 のPIN を登録します。

GUIツールを起動してYubiKey をパソコンに挿入し、メニューの[Applications] > [FIDO2] をクリックします。

YubiKey Manager(GUI) FIDO2 PIN(未登録)

FIDO2 PIN のところに”No PIN is set” と表示されています。
[Set PIN] をクリックします。

YubiKey Manager(GUI) FIDO2 PIN(登録)

登録するPINNew PINConfirm PIN の2ヶ所に入力して[Set PIN] をクリックします。
PIN は4文字以上の英数字

YubiKey Manager(GUI) FIDO2 PIN(登録済)

元の画面に戻りました。
A PIN is set, 8 retries left” の表示に変わりました。
PIN が登録され、PIN の入力失敗が8回再試行できる状態になっています。
登録したパスワードは忘れないようパスワードマネージャー等に保存しておきましょう

PIN の登録が完了したので、再度CLI ツールのコマンドを実行してみます。

% ykman fido info
PIN is set, with 8 attempt(s) remaining.

% ykman fido access verify-pin
Enter your PIN:
PIN verified.

% ykman fido credentials list
Enter your PIN:

今回はエラーになりませんでした。
コマンドについての簡単な説明を以下、記載しておきます。

  • ykman fido info
    • FIDO2 アプリの状態を表示するコマンド
    • PIN の登録状態、PIN 入力のリトライ回数が表示される
  • ykman fido access verify-pin
    • FIDO2 をサポートするYubiKey の場合、PIN 入力のリトライ回数をリセットするコマンド
    • コマンド実行時にPIN の入力が求められる
    • 他のPIN 入力が必要なコマンドを実行するとPIN のリトライ回数がリセットされるので、このコマンドが役に立つことはなさそう。失敗する時はこのコマンドも実行できないわけで。。
  • ykman fido credentials list
    • FIDO2 アプリの登録情報を一覧表示するコマンド
    • コマンド実行時にPIN の入力が求められる

GUI ツールを使ったPIN の登録の解説はここまでで、
参考まで、CLI ツールのPIN を登録するコマンドを載せておきます。

ykman fido access change-pin -n<設定するPIN>

鍵の生成〜サーバに鍵を登録〜SSH接続

1. macOSにバンドルでインストールされていたOpenSSHを使って鍵を生成(失敗)

ed25519-sk” を指定してssh-keygen を実行します。

% ssh-keygen -t ed25519-sk
Generating public/private ecdsa-sk key pair.
You may need to touch your authenticator to authorize key generation
Key enrollment failed: unknown or unsupported key type

失敗しました。
不明もしくはサポートされていない鍵タイプ” だそうです。

Yubico のDeveloper 向けサイトに「Disabled by Apple on the bundled version of OpenSSH in MacOS as of the last update to this page」という記載が見つかりました。macOS にバンドルされているOpenSSH は“ecdsa-sk” と “ed25519-sk” が無効にされているみたいです。

Apple のDeveloper 向けサイト等に何か情報がないか探しましたが、何も見つかりませんでした。これ以上突っ込まないで先に進みます。

2. Homebrew でインストールしたOpenSSHを使って鍵を生成

Homebrew でインストールしたOpenSSH であれば鍵生成のコマンドを実行できたという情報が見つかったので試してみました。(結論、成功)

Homebrew でOpenSSH をインストールします。

brew install openssh

Homebrew でインストールしたOpenSSH のコマンドにPATH を通します。
~/.zshrc に下記を追記します。
(2022.6.16 削除)

export PATH=$(brew --prefix openssh)/bin:$PATH

source ~/.zshrc を実行して設定を反映します。 (2022.6.16 削除)

Homebrew でインストールしたOpenSSH のコマンドにPATH が通っていることを確認します。(2022.6.16 追記)

% which ssh
/opt/homebrew/bin/ssh

% ls -l $(which ssh)
lrwxr-xr-x  1 Capybara admin  31  6 16 13:49 /opt/homebrew/bin/ssh -> ../Cellar/openssh/9.0p1/bin/ssh

ed25519-sk” を指定してssh-keygen を実行します。
今回は成功したので、作成された鍵ファイルを削除して、追加で幾つかのオプションを付けて再度実行しました。

% ssh-keygen -t ed25519-sk
 → 成功
% rm ~/.ssh/id_ed25519-sk*
 → 鍵を削除

% ssh-keygen -t ed25519-sk -O resident -O application=ssh:Capybara
Generating public/private ed25519-sk key pair.
You may need to touch your authenticator to authorize key generation.
 → ここでYubiKey をタッチ👆
Enter PIN for authenticator:
 → ここで登録したFIDO2のPIN を入力

Enter file in which to save the key (/Users/Capybara/.ssh/id_ed25519_sk):
 → ここで生成する鍵のファイル名を入力(何も入力せずEnterも可)
Enter passphrase (empty for no passphrase):
 → ここで生成する秘密鍵のパスフレーズを入力
Enter same passphrase again:
 → パスフレーズを再度入力
Your identification has been saved in /Users/Capybara/.ssh/id_ed25519_sk
Your public key has been saved in /Users/Capybara/.ssh/id_ed25519_sk.pub
The key fingerprint is:
SHA256:z0xxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxd0 [email protected]
The key's randomart image is:
+[ED25519-SK 256]-+
|        ......   |
|        ......   |
|        ......   |
+----[SHA256]-----+

% ls -l ~/.ssh
-rw-------  1 Capybara staff   525  5 29 16:31 id_ed25519_sk
-rw-r--r--  1 Capybara staff   159  5 29 16:31 id_ed25519_sk.pub

追加したssh-keygen のオプションの簡単な説明を記載しておきます。

  • -O resident
    • 鍵をFIDO 認証器内に保存する
    • このオプションの有無に関係なく、~/.ssh フォルダに鍵ペアは作成される
    • FIDO 認証器内に鍵を保存しておくと、ssh-keygen -K でカレントディレクトリに秘密鍵と公開鍵のファイルを書き出すことができる
  • -O application=ssh:<your-key-name>
    • 生成する鍵の名前を指定する
    • 指定する場合、“ssh:” に続けて任意の名前を指定する必要がある
    • このオプションを指定しない場合、デフォルトの“ssh:” で作成される
    • ここで指定した名前は、CLI ツールで鍵を削除する際に使われる(例:ykman fido credentials delete ‘ssh:Capybara’

-O resident オプションを付けたので、CLI ツールでYubiKey 内に保存された鍵を確認します。

% ykman fido credentials list
Enter your PIN:
ssh:Capybara 0000000000000000000000000000000000000000000000000000000000000000 openssh

-O application オプションで指定した名前が先頭にある行が1行出力されました。
ALLゼロが何なのかよく分かりませんが、とりあえずYubiKey 内に保存されているようです。

3. 公開鍵をサーバにアップロード&登録

サーバに公開鍵をアップロードします。

scp id_ed25519_sk.pub [email protected]:~/

サーバにSSHで接続して、接続ユーザの~/.ssh/authorized_keys公開鍵を登録します。

% ssh [email protected]

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cat id_ed25519_sk.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

4. 公開鍵認証でサーバにSSH接続

SSH の公開鍵認証でサーバに接続できるか確認します。

% ssh [email protected]
Enter passphrase for key '/Users/Capybara/.ssh/id_ed25519_sk':
 → パスフレーズを入力
Confirm user presence for key ED25519-SK SHA256:z0xxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxd0
 → YubiKey をタッチ👆
User presence confirmed

パスフレーズ + YubiKey をタッチ2要素認証でサーバに接続することができました。

5. パスワード認証を不許可に設定

SSHサーバの設定/etc/ssh/sshd_config でパスワード認証を不許可にすれば、登録した公開鍵を使った 認証しかできなくなります。

PubkeyAuthentication yes

Match User ubuntu
  PasswordAuthentication no
  AuthorizedKeysFile /home/ubuntu/.ssh/authorized_keys

systemctl reload sshd を実行して設定を反映します。

ssh-agent を使う

ついでにssh-agent を使えばパスフレーズはssh-agent が代理入力してYubiKey のタッチだけでSSH接続できるのではと試したら、SSH接続のコマンドでエラーになりました。
使ったSSHクライアントはHomebrew でインストールしたOpenSSH です。
エラーの原因や解消する方法を調べましたが見つからなかったので、記録として残しておきます。

1. ssh-agentに秘密鍵の登録〜SSH接続(失敗)

% ssh-add id_ed25519_sk
Enter passphrase for id_ed25519_sk:
 → ssh-agentへの登録は成功

% ssh [email protected]
sign_and_send_pubkey: signing failed for ED25519-SK "/Users/Capybara/.ssh/id_ed25519_sk" from agent: agent refused operation
 → サーバの接続は失敗

% ssh-add -D
All identities removed.
 → 後片付けとして、ssh-agentの登録を削除

ちなみに、SSHサーバの設定でパスワード認証を不許可にしないでおくと、SSH接続でエラーになるけれどもパスワード入力が求められ、パスワード認証を使ってSSH接続することはできました。

2. keychain関連のオプション

更についでに、ssh-add のkeychain関連のオプションを使ってみたらエラーになりました。不正なオプションとのことです。
そもそも、Homebrew でインストールしたOpenSSH にはkeychain関連のオプションがありませんでした。macOS にバンドルされているOpenSSH 限定のオプションだったようです。

% ssh-add --apple-use-keychain
ssh-add: illegal option -- -
 → 秘密鍵のパスフレーズをキーチェーンに登録しようとしたら失敗

Apple のDeveloper 向けサイトに掲載されているmacOS 10.12.2 (Sierra) のOpenSSH の更新のページに、Keychain とssh-agent の変更について書かれていました。書きっぷりがmacOS に搭載されているOpenSSH の更新と見えなくもないです。
一応リンクを貼っておきます。

YubiKey のFIDO2 を無効にする設定

YubiKey Manager にYubiKey のFIDO2 を無効にする機能があったので、こちらもどのように機能するか試してみました。

  • GUIツールとCLIツールのどちらでも無効にすることはできます
  • この設定は前述のPIN の登録をしなくてもできます

1. YubiKey のFIDO2 を無効にする

GUIツールのメニューの[Interfaces] をクリックします。

YubiKey Manager(GUI) Interfaces FIDO2(有効)

左のUSB のFIDO2 のチェックをOFF にして[Save Interfaces] をクリックします。

YubiKey Manager(GUI) Interfaces FIDO2(無効)

CLI ツールでFIDO2無効になっていることを確認します。

% ykman info
Device type: YubiKey 5 NFC
Serial number: 99999999
Firmware version: 5.4.3
Form factor: Keychain (USB-A)
Enabled USB interfaces: OTP, FIDO, CCID
NFC transport is enabled.

Applications	USB     	NFC
FIDO2       	Disabled	Enabled
OTP         	Enabled 	Enabled
FIDO U2F    	Enabled 	Enabled
OATH        	Enabled 	Enabled
YubiHSM Auth	Disabled	Disabled
OpenPGP     	Enabled 	Enabled
PIV         	Enabled 	Enabled

% ykman config usb --list
OTP
FIDO U2F
OATH
PIV
OpenPGP

10行目のFIDO2 のUSB 欄がDisabled になっています。
また、18行目のコマンドの結果にFIDO2 が出力されていないです。

2. FIDO2 が無効の状態でSSH接続を試行

% ssh [email protected]
Enter passphrase for key '/Users/Capybara/.ssh/id_ed25519_sk':
 → パスフレーズを入力
Confirm user presence for key ED25519-SK SHA256:z0xxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxd0
sign_and_send_pubkey: signing failed for ED25519-SK "/Users/Capybara/.ssh/id_ed25519_sk": device not found
[email protected]: Permission denied (publickey).

パスフレーズの入力後にエラーになりました。

この後、再度有効にして接続できるか試したら接続できました。
無効にしてもFIDO2 の登録情報は削除されずに残ります。

参考まで、CLI ツールのFIDO2 を無効・有効にするコマンドを載せておきます。

% ykman config usb -d FIDO2
Disable FIDO2.
Configure USB? [y/N]: y
 → 無効になる ※オプション[--disable] も同じ

% ykman config usb -e FIDO2
Enable FIDO2.
Configure USB? [y/N]: y
 → 有効になる ※オプション[--enable] も同じ
  • 上記のコマンドを実行するとYubiKey が点滅するのでタップしてみると、OTP のスロットに設定したYubico OTPの44文字が入力され「Error: invalid input」になった。点滅するけれどもタッチは不要です
  • GUIツールを開いた状態でCLIツールで有効・無効を変更してもGUIツールの表示は変わらない。変更をGUIツールの表示に反映するにはGUIアプリの再起動かYubiKey の再接続が必要

3. FIDO2 が無効の状態でTwitter のログインを試行

以前の投稿「YubiKeyでTwitterアカウントを保護する」でセキュリティキーを使った2段階認証の設定をしていたので、このYubiKey の有効・無効の影響を試してみました。

Yubico のサイトにはTwitter はFIDO2U2F がサポートされていると書かれていました。

Twitter Security protocol support (U2F FIDO2)

実際に試した結果は下記の通りです。

FIDO2FIDO U2Fログイン試行の結果
無効有効ログイン成功
有効無効ログイン成功
有効有効ログイン成功
無効無効ログイン失敗

FIDO2FIDO U2F の両方を無効にした場合のみログインに失敗しました。
振る舞いとしては、1段階目のパスワード入力後、2段階目でパソコンに挿入したYubiKey が点滅せず、タップしても無反応でした。

ちなみに、前述のFIDO2 の登録情報を確認するykman fido credentials list を実行すると、ssh-keygen -t ed25519-sk -O residentで作成した鍵は表示されますが、Twitter の情報は表示されませんでした。
Yubico の下記リンク先に書かれていることが関係していそうな雰囲気があります。(セキュリティ観点で表示されないようにファームウェアがアップデートされた?)
表示されない理由が分かっても解消する訳ではなさそうなので深掘りするのは止めておきます。

参考

YubiKeyでTwitterアカウントを保護する

Yubico社のセキュリティキーYubiKey 5 NFC を購入しました。
とりあえず、Twitter のアカウントを保護することに使ってみたので、その際の手順と、セキュリティキーを紛失・破損した場合の代替手段について解説します。

はじめに

Twitter のログインについて

Twitter にログインする方法は、下記2つのいずれかを選択することができます。

  • Twitter アカウントのID(電話番号/メールアドレス/ユーザー名)とパスワードを使う
  • 他サイト(Google/Apple)のアカウントを使う

今回解説するのは1つ目「Twitter アカウントのID(電話番号/メールアドレス/ユーザー名)とパスワードを使う」の方で、IDとパスワードに加えてセキュリティキーを認証要素として登録するものになります。

Twitter の2要素認証について

Twitter の2要素認証では、2要素目に下記3つの方法を選択できるようになっています。(複数選択も可能)

  • テキストメッセージ
    • 登録した携帯電話番号にSMSで認証コードを通知して入力させる
  • 認証アプリ
    • スマホのGoogle 認証システム等のアプリに表示される認証コードを入力させる
  • セキュリティキー
    • YubiKey やGoogle のTitan Security Key 等のUSBタイプのセキュリティキーをパソコンに物理的に接続してタップ(またはスマホにNFCで無線接続)する

セキュリティキーは物理的にUSBキーを持っていることで当人確認する仕組みなので、セキュリティキーがユーザーの手元にある限り、第三者による不正ログインが成立しないことから、とても安全な仕組みとされています。

セキュリティキーを紛失・破損時の代替手段

セキュリティキーは物理的なUSBキーなので、紛失や破損した場合の代替手段を準備しておく必要があります。

  • バックアップ用の別のセキュリティキーも登録しておく
  • 2要素認証のテキストメッセージも登録しておく
  • 2要素認証の認証アプリも登録しておく
  • バックアップコードを控えておく

バックアップコードは、TOTPのように時間によって変化しない使い捨ての認証コードで、2要素目に使うことができる仕組みとして用意されています。
発行された認証コードは安全な場所に保管しておく必要があるのと、認証コードは使い捨てなので、使用した場合は新しい認証コードを発行して保管するという運用が必要です。

環境

今回使った環境です。

セキュリティキー

  • YubiKey 5 NFC

パソコン

  • Mac
  • Chrome

スマホ

  • Android
  • Twitterアプリ

セキュリティキーの設定(パソコン)

ブラウザでTwitter にログインした状態で、以下の流れでメニューを選択して2要素認証のページを表示します。

  1. サイドメニューの[もっと見る] を開き、[設定とプライバシー] をクリック
  2. [セキュリティとアカウントアクセス] > [セキュリティ] > [2要素認証] をクリック
設定(2要素認証)
※ イメージは認証アプリが既に設定されていた状態

[セキュリティキー] のチェックボックスをクリックします。

設定(パスワードを入力)

パスワードを入力します。

設定(セキュリティキー)ステップ1

[はじめる]をクリックします。

設定(セキュリティキー)ステップ2

[キーを追加] をクリックします。

設定(Chromeの小ウィンドウ)

[USBセキュリティキー] をクリックします。

設定(Chromeの小ウィンドウ)セキュリティキー

セキュリティキーを挿入し、タップしてください” と表示されたら、USB ポートにYubiKey を挿入します。
挿入するとYubiKey 本体が点滅するので指でタップします。

設定(セキュリティキーの名前)

登録したセキュリティキーに付ける任意の名前を入力して[次へ] をクリックすると、”完了しました” のページが表示されます。

どういう名前をつけるか?
・セキュリティキーを1つしか持っていないなら”YubiKey” でよい
・複数持っている場合は、
(1) どのYubiKey か分かる名前にする(例:”YubiKey 5 NFC” 、”Security Key NFC”)
(2) メインで使うものと予備用の使い分けが分かる名前にする(例:”Primary YubiKey”、”Backup YubiKey”)

設定(完了)

上の画像の赤枠の箇所にバックアップコードが表示されるので、安全な場所に保管しておきます。

バックアップコードをどうやって保管するか?
・物理的なノートに手書きする
・スクリーンショットの画像ファイルをパスワードマネージャー(1Password等)に保存する

[完了] をクリックすると設定は終了になります。

[パックアップコードを取得] をクリックすると、バックアップコードのページが表示されます。

設定(バックアップコード)

バックアップコードのページには、完了しましたのページに表示されていたのと同じバックアップコードが表示されます。
バックアップコードのページは、2要素認証のページにある[バックアップコード] をクリックして表示できるので、後で見ることができます。

青字の”新しいコードを生成” をクリックして新しいコードを発行することができます。新しいコードを発行すると古いコードは使えなくなるので、クリックした場合は新しいコードを保管しておく必要があります。

設定(2要素認証)

2要素認証のページに戻ると、[セキュリティキー] のチェックがONになっています。これで設定は終了です。

複数のセキュリティキーを登録したい場合は、青字の”セキュリティキーを管理” をクリックして表示されるセキュリティキーを管理のページで”別のキーを追加” から追加の登録をすることができます。

設定(セキュリティキーを管理)

セキュリティキーを使ってログイン(パソコン)

ブラウザでTwitter のログインページを表示します。

Twitterログイン

電話番号/メールアドレス/ユーザー名 を入力して[次へ] をクリックします。

Twitterログイン(パスワードを入力)

パスワードを入力して[ログイン] をクリックします。

Twitterログイン(Chromeの小ウィンドウ)
Chromeの小ウィンドウ

twitter.comで本人確認を行う” と表示されたら、[USBセキュリティキー] をクリックします。

なお、既にUSB ポートにYubiKey を挿入していると、このChrome の小ウィンドウが表示された時点でYubiKey 本体が点滅するので指でタップします。これでログインが完了します。
この場合、次の小ウィンドウは表示されないです。

Twitterログイン(Chromeの小ウィンドウ)セキュリティキー
Chromeの小ウィンドウ

セキュリティキーを挿入し、タップしてください” と表示されたら、USB ポートにYubiKey を挿入します。
挿入するとYubiKey 本体が点滅するので指でタップします。これでログインが完了します。

セキュリティキーを使ってログイン(スマホ)

Twitter アプリを起動してログインページを表示します。

Twitterログイン(スマホ)

電話番号/メールアドレス/ユーザー名 を入力して[次へ] をタップします。

Twitterログイン(パスワード入力)

パスワードを入力して[ログイン] をタップします。

Twitterログイン(Chromeのウィンドウ)

twitter.comでセキュリティキーを使用する” と表示されたら、イメージのようにスマホの背面にYubiKey を添えるようにくっつけます。

Twitterログイン(完了)

成功” と表示されたら[ログイン] をタップします。これでログインが完了します。

バックアップコードを使ってログイン(パソコン)

前述「セキュリティキーを使ってログイン(パソコン)」でパスワード入力後に表示されるChromeの小ウィンドウ(*)で[キャンセル] をクリックすると”別の認証方法を選択” のページが表示されます。

ログイン(別の認証方法を選択)

[バックアップコードを使用] のチェックボックスをクリックして[次へ] をクリックします。

ログイン(バックアップコードを入力)

バックアップコードを入力して[次へ] をクリックするとログインが完了します。

あとがき

  • 使用するセキュリティキーについて
    • 今回使用したのは高機能のYubiKey 5 シリーズ(最安モデル$45 USD)
    • 個人向けのSecurity Key シリーズ(最安モデル$25 USD)でも同じことはできる
  • テキストメッセージや認証アプリの2要素認証で十分では?
    • それらは追加費用が掛からないので誰でも手軽に導入できる点はいい
    • ユーザが入力したID・パスワードと2要素目の認証コードを入力させて、裏で自動で正規のサイトに入力する偽サイトがあるので、その方式だとそのような仕掛けを用意したフィッシング攻撃に引っかかると攻撃者に不正アクセスされてしまうので、十分とは言い切れない
  • 個人用のTwitter アカウントでそこまでする必要あるか?
    • 分かりません
  • 法人用のアカウントはセキュリティキーを使った方がよい?
    • セキュリティキーを使えば、専用のスマホを法人が用意する必要ない。セキュリティキーの方が低コスト、管理しやすいと思われる
    • スマホが必要な方式で個人のスマホが使われると何かが起こる(スマホの紛失、担当者が退職してログインできなくなる等)
  • セキュリティキーを紛失してバックアップコードもどこかにいってしまった。予備の2要素認証も設定していない。。
    • パスワードを忘れた場合はこちら” を使ってリカバリしましょう!(今回の調査範囲外)

参考

WordPress→Twitter の導線

WordPress のブログからTwitter への導線について考察してみます。
ブログを見に来てくれた人がTwitter をやっていることに気づき、ツイートを見に来たり、アカウントをフォローする流れが感覚的にできる状態になっているのかを整理したいと思います。

Twitter のフォロアーになってくれれば、タイムラインに流れるTwitter へのブログの自動投稿が目に入り、ブログに来てくれることにつながるので、ブログとTwitter の両方を運用するのであれば意識しておいた方がよさそうです。

1. Twitter をやっていることに気づく

ブログのトップページや投稿のページを開いた時は、PCとスマホともに画面上にTwitter をやっていることがわかるボタンやアイコンは表示されていないです。
ただ、投稿を読んで気に入ってくれた時に気づいてもらえれば良いというのと、デザイン上もページが表示された時にあまり雑音がない状態にしておきたいので、これでよいことにします。

上記の「投稿を読んで気に入ってくれた時に気づいてもらえれば良い」という点で、投稿の下には共有ボタンを表示するようにしてあります。

また、PCではサイドバーが右に表示されるので、投稿を読んでいる途中でサイドバーにあるTwitter ボタン(フォローボタンとメンションボタン) に気づいてもらえるかもしれません。

あと、ページの先頭になければ末尾に探しに行くという行動を想定して、ページの末尾のフッター部にTwitter アイコンを表示してあります。

2. Twitter のツイートを見に来たり、アカウントをフォローする

投稿の共有ボタン

投稿の下に共有ボタンを表示してあります。
投稿の先頭に配置してもよいのかもしれませんが、投稿を読み終わった時にそのままシェアという行動に移れるので、ここに配置するのが自然かと思います。

共有ボタンをクリックすると、Twitter のツイートするウィンドウが開き、そこには投稿のタイトルとURLが既に入力された状態になります。

サイドメニューのTwitterボタン(フォローボタン)

サイドバーに“@RodentGiantさんをフォロー” というボタンを表示してあります。
このボタンのデザインから、このボタンをクリックすればフォローする流れにつながると予想できると思います。

ボタンをクリックすると、Twitterアカウントのページが開き、[フォロー] ボタンが表示されるようになっています。

サイドメニューのTwitterボタン(メンションボタン)

サイドバーに”@RodentGiantさんへツイートする” というボタンを表示してあります。
このボタンのデザインから、このボタンをクリックすれば@RodentGiant 宛にツイートする流れにつながると予想できると思います。

ボタンをクリックすると、Twitter のツイートするウィンドウが開き、そこには”@RodentGiant” が入力された状態になります。

このTwitter ボタンはTwitter Publish で生成したHTMLコードをウィジェットに貼り付けて表示しています。

ページ末尾のTwitterアイコン

ページの末尾のフッター部にTwitter アイコンを表示してあります。
鳥の絵だけの文字がないアイコンのデザインなので、このアイコンをクリックすればTwitter のアカウントのページが表示されると予想できると思います。

このアイコンはWordPress 標準のソーシャルリンクメニューを使って表示しています。
以下、表示させる手順を記載します。

  1. [外観] > [メニュー] をクリック
  2. [メニューを編集]タブの[メニュー構造] を編集する
    • Twitter 以外(Facebook、Instagram、メール)のカスタムリンクを削除
    • Twitter のURLに自身のTwitter アカウントのURLを指定
  3. [メニュー設定] の[メニューの位置] にある”ソーシャルリンクメニュー” のチェックを入れて、[メニューを保存] ボタンをクリック

※ 上記の手順だけでなく、[外観] > [カスタマイズ] > [メニュー] > [サブメニュー] でも同じ設定ができます。

3. その他

投稿の本文へのツイートの埋め込み

直前の投稿「Twitter Publish」で記載した方法で、Twitter の特定のツイートを投稿に埋め込むことができるので、ここからTwitter のツイートのページを表示させることができます。

位置づけがなんとなく上記「2. Twitter のツイートを見に来たり、アカウントをフォローする」と違うのでその他として記載しておきました。

  • 自分以外のTwitter アカウントのツイートの埋め込み
    • クリックすると、その人のツイートが表示される
    • 投稿に誰かのツイートを掲載したい時に使う
  • 自分のTwitter アカウントのツイートの埋め込み
    • クリックすると@RodentGiant のアカウントのツイートが表示される
    • 自分のツイートを掲載したい時に使う(やる機会があまりなさそう)

あとがき

投稿の共有ボタンを表示する方法について、今回は記載しませんでした。機会があったら書こうと思います。

参照

Twitter Publish

自身のブログやホームページにTwitter のツイートやボタンを埋め込む方法として、Twitter社がTwitter Publish というサービスを提供しています。
Twitter Publish − Twitter

使い方

1. URLを指定

“What would you like to embed?” と表示されているので、埋め込みたいページのURLを入力して[→] をクリック。

URLを指定

2. タイムラインの埋め込み(左)かTwitter ボタン(右)か選択

“Here are your display options” と表示されているので、”Embedded Timeline”(左)か”Twitter Buttons”(右)のどちらかをクリック。

選択(タイムラインの埋め込み、Twitterボタン)

3. タイムラインの埋め込み

“Embedded Timeline” を選択すると、
埋め込み用のHTMLタグが表示されるので、下の方に表示されているプレビューでよければ、[Copy Code] ボタンをクリックして、自身のブログ等に貼り付けます。
※ [Copy Code] ボタンをクリックすると、クリップボードにHTMLタグがコピーされます。

“set customization options” という青文字がリンクになっているので、このリンクをクリックすると、デザインをカスタマイズすることができます。
デザインを選択するオプションが表示されるので、適宜変更して[Update] をクリック。

4. Twitter ボタン

Twitter Buttons” を選択すると、
“Select the button you’d like to use” と表示されるので、”Follow Button”(左)か”Mention Button”(右)のどちらかをクリック。

選択(フォローボタン、メンションボタン)

4-1. フォローボタン

“Follow Button”(左)を選択すると、
埋め込み用のHTMLタグが表示されるので、下に表示されているプレビューでよければ、[Copy Code] ボタンをクリックして、自身のブログ等に貼り付けます。
※ “set customization options” のリンクからデザインのカスタマイズが可能

4-2. メンションボタン

Mention Button”(右)を選択すると、
埋め込み用のHTMLタグが表示されるので、下に表示されているプレビューでよければ、[Copy Code] ボタンをクリックして、自身のブログ等に貼り付けます。
※ “set customization options” のリンクからデザインのカスタマイズが可能

実際の埋め込み結果

実際にこのページに埋め込んでみました。
埋め込むと以下のように表示されます。

タイムラインの埋め込み

プロフィールページのURL(https://twitter.com/RodentGiant)

ツイートページのURL(https://twitter.com/RodentGiant/status/1481924474740293645)

Twitterボタン(フォローボタン)

Twitterボタン(メンションボタン)

WordPress での利用

WordPress へのHTMLタグの埋め込み

[Copy Code] ボタンをクリックしてクリップボードにコピーしたHTMLタグは、WordPress ではカスタムHTMLのブロックに貼り付けるだけで、ページに埋め込むことができます。

WordPress の埋め込みブロックの機能

なお、WordPress には埋め込みブロックという便利な機能があるので、埋め込みたいTwitter のページのURLを指定するだけで簡単に、Twitter Publish で作ったHTMLタグを使うのと同じように表示させることができます。
デザインのカスタマイズをしたい場合はTwitter Publish を使う、あまり凝らずに簡単に貼り付けたい場合は埋め込みブロックを使う、というように使い分けをしてもよいのかもしれないです。

参照

Twitter はじめました

Twitter のアカウントを作りました。
ブログとTwitter の両方をいい感じに使い分けできればと思います。

いい感じに使い分けのイメージ

  • ブログの投稿は情報の整理、Twitter は気軽な備忘録
  • ブログに投稿すると、投稿のリンクが自動でツイートされる

参考

  • Twitter − Twitter の公式サイト