KeePassXC の Steam TOTP を試す

Steam ガードというスマートフォンアプリを使ったValve独自TOTPな多要素認証があります.これは通常のTOTP(rfc6238)と違い独自実装で数字だけではなくアルファベットも利用しているのでOATH ToolkitやGoogle Authenticatorでは認証できません.

Steam ガードのTOTPはValve独自ですが一応いくつかの実装はあります.(未検証)

KeepassXC にも TOTP(KeePassXC 2.2.0以降)と Steam ガードの TOTP(KeePassXC 2.3.0以降)がサポートされています.今回これを試してみました.

a generator for time-based one-time passwords (TOTP)
Add support for Steam one-time passwords [#1206]

しかし,これらを試すにはSteam Guard Mobile Authenticatorを設定したスマートフォンの中からTOTPの秘密鍵を入手する必要があります.以前のAndroidではadb backup するだけで鍵の書かれたファイルが入手できていたらしいのですが現在は暗号化されていてこの手順では入手できないようです.
GitHubにAPKにpatchするscriptが公開されていたのでまずはこれを試してみました.

これがうまく行けば以前のようにadb backupが出来るようになるはずです.しかし,バージョンの問題か失敗しました.

別の方法としてAndroidのroot取得済み端末にSteam Guard Mobile Authenticatorを導入してこちらの端末を有効にして秘密鍵を取得しました.

rooted端末から設定ファイルを抜き出してトークン取得
$ adb shell #Android shellを起動してファイル名を確認
1|shell@MK16i:/ $ su
root@MK16i:/ # ls -l /data/data/com.valvesoftware.android.steam.community/files/
-rw-rw---- u0_a59   u0_a59        448 2018-08-31 22:25 Steamguard-76561198085918260
root@MK16i:/ # exit
root@MK16i:/ $ exit #AndroidからexitしてPCに戻る
$ adb root  #rootになる
$ adb pull /data/data/com.valvesoftware.android.steam.community/files/Steamguard-76561198085918260  #ファイル取得
$ adb kill-server  #adb server終了
$ file Steamguard-76561198085918260
Steamguard-76561198085918260: ASCII text, with very long lines, with no line terminators
$ lv Steamguard-76561198085918260
$ jq .uri Steamguard-76561198085918260 | sed -e 's/^.*=\(.*\)&.*$/\1/'  #鍵表示
OXYBZQLEOB7KKFAPERMN8EGNOLJWEDYZ
$ shred -uz Steamguard-76561198085918260  #ファイル消去

取得した鍵をKeePassXCに登録してみます.
Steamの設定上で右クリック,「タイムベースワンタイムパスワード」→「TOTP の設定…」から「キー」に設定します.
登録した後Steamの設定上で右クリック,「タイムベースワンタイムパスワード」→「TOTP を表示」でトークンが表示できます.
29467671377 1a01b3ce35

Androidスマートフォンアプリと見比べてみると同じトークンが表示され,Steamにもloginできます :)

43687930524 4260e0f2a6

[

Steam Guard Mobile Authenticatorは同時に1端末しか登録できず,2台目を設定すると1台目の端末の鍵が無効にされます.なのでKeePassXCを利用する場合はroot端末と併用するか,root端末から消してKeePassXCのみで運用するしかなさそうです.

複数の携帯電話で Steam アカウントを認証できますか?
いいえ、ひとつのアカウントで一度に有効化できる認証機器はひとつだけです。

もう一つ問題が.KeePassXCにはcli版が同梱されているのですが,バージョン2.3.4時点ではTOTPのオプションが見当たりません.GUIのみの利用となりそうです.

$ keepassxc-cli -h
Usage: keepassxc-cli [options] command
KeePassXC command line interface.

Available commands:
add            Add a new entry to a database.
clip           Copy an entry's password to the clipboard.
diceware       Generate a new random diceware passphrase.
edit           Edit an entry.
estimate       Estimate the entropy of a password.
extract        Extract and print the content of a database.
generate       Generate a new random password.
locate         Find entries quickly.
ls             List database entries.
merge          Merge two databases.
rm             Remove an entry from the database.
show           Show an entry's information.


Options:
  -h, --help     Displays this help.
  -v, --version  Displays version information.

Arguments:
  command        Name of the command to execute.
$ keepassxc-cli -v
2.3.4
環境
$ dpkg-query -W keepassxc
keepassxc       2.3.4+dfsg.1-1
$ lsb_release -d
Description:    Debian GNU/Linux unstable (sid)
$ uname -m
x86_64

SteamにWineの機能が加わったらしいので少し試す

ゲーミングプラットホームのSteamにLinux版のクライアントもあります.これにWindows版のゲームが遊べるようになる機能がベータ版に加わったらしいです.これはWindows互換レイヤーのWineにSteamを作っているValveSoftwareがゲーム向けの機能に手を加えたProtonというものを組み込んで実現しているようです.
今の所Wineで動作するものという括りではなく,Valveが指定したタイトルだけが動作するようです.
#設定で全てのゲームで有効にすることが可能だった.
動作するゲームのリストは以下のアナウンスページで確認できます.今の所27タイトルのようです.(これを知っていれば先日のセールでDOOMを……)

ということでベータを有効にして試してみました.

ベータへの参加を有効にします.

44213791731 9a4cd08d09.jpg
43495999044 c67b4a40fd.jpg

Steamの再起動を行います.

43308073705 9bf75145b2.jpg

ベータ版がダウンロードされ,起動します.

42405873910 5bceb6c319.jpg

対応のDOOMのデモ版を試してみようと思いましたが,デモの方はまだ対応していないようで駄目でした.

44213916001 0ef30bab4a.jpg

対応リストの中の「Doki Doki Literature Club!」は無料のようなのでこれで試してみます.

ページを開くとアイコン上はWindows/Macのみの対応ですが,「ゲームをプレイ」ボタンが有効になっています.そのまま通常の導入手順でダウンロードとインストールが始まり正常終了しました.

44213925501 18fd9a3b74.jpg

ライブラリに登録されました.見た目はネイティブのものと同じです.

44184862972 207d8776b3.jpg

そして普通に起動します.
起動中のプロセスを確認すると特にwineやprotonと名前の付いたプロセスは見当たらずSteamに組み込まれているように見えます.

追記)
「Doki Doki Literature Clug!」にはもともと`~/.steam/steam/steamapps/common/Doki\ Doki\ Literature\ Club/DDLC.sh`というshell scriptがあり,Steam Play を通さなくてもLinuxで動作するようです.
「FSteam:Fallout Shelter」で試すと,以下のようにそれらしいプロセス経由で動作しています.(うまく起動しないけど)

$ pstree -n 31976
bash─┬─bash───steam─┬─22*[{steam}]
     │              ├─steam───sh───steamwebhelper.───steamwebhelper─┬─21*[{steamwebhelper}]
     │              │                                               ├─steamwebhelper─┬─steamwebhelper───13*[{steamwebhelper}]
     │              │                                               │                └─steamwebhelper───12*[{steamwebhelper}]
     │              │                                               └─steamwebhelper───6*[{steamwebhelper}]
     │              └─SteamChildMonit───sh───python2.7───wineserver
     └─tee
$ ps aux| grep -i wine
matoken   1842  0.0  0.0   4240   940 pts/5    S+   15:25   0:00 grep -i wine
matoken   3005  0.2  0.0  55596 13052 ?        Ss   14:53   0:04 /home/matoken/.local/share/Steam/steamapps/common/Proton 3.7/dist/bin/wineserver
matoken   3012  0.0  0.2 2078348 37364 ?       Sl   14:53   0:00 C:\windows\system32\winedevice.exe
matoken   3028  0.3  0.2 2144476 39268 ?       Sl   14:53   0:06 C:\windows\system32\winedevice.exe
matoken   9450  0.0  0.2 1947276 35808 ?       Sl   14:30   0:00 C:\windows\system32\winedevice.exe
matoken   9464  0.3  0.2 2013404 37772 ?       Sl   14:30   0:10 C:\windows\system32\winedevice.exe
matoken  22254  0.0  0.2 2078348 38144 ?       Sl   14:40   0:00 C:\windows\system32\winedevice.exe
matoken  22270  0.3  0.2 2144476 39424 ?       Sl   14:40   0:08 C:\windows\system32\winedevice.exe
matoken  32709  0.0  0.1  45432 25808 ?        S    15:23   0:00 /home/matoken/.local/share/Steam/steamapps/common/Proton 3.7/dist/bin//wineserver -w
$ ps aux| grep -i proton
matoken   1916  0.0  0.0   4240   936 pts/5    S+   15:25   0:00 grep -i proton
matoken   3005  0.2  0.0  55596 13052 ?        Ss   14:53   0:04 /home/matoken/.local/share/Steam/steamapps/common/Proton 3.7/dist/bin/wineserver
matoken  32707  0.0  0.1  41048 24736 ?        S    15:23   0:00 /bin/sh -c '/home/matoken/.local/share/Steam/steamapps/common/Proton 3.7'/proton waitforexitandrun '/home/matoken/.local/share/Steam/steamapps/common/Fallout Shelter/FalloutShelter.exe'
matoken  32708  0.0  0.0  52044 14352 ?        S    15:23   0:00 python2.7 /home/matoken/.local/share/Steam/steamapps/common/Proton 3.7/proton waitforexitandrun /home/matoken/.local/share/Steam/steamapps/common/Fallout Shelter/FalloutShelter.exe
matoken  32709  0.0  0.1  45432 25808 ?        S    15:23   0:00 /home/matoken/.local/share/Steam/steamapps/common/Proton 3.7/dist/bin//wineserver -w

少し遊んだ感じでは特に違和感なく遊べています.(が,1時間ほどしか遊んでいないところでSSDが壊れてそれ以上は試せていません><)

43308551205 e4f9cf42a5.jpg

なお,「Doki Doki Literature Clug!」は英語版しかありませんが,有志による日本語化パッチが提供されているので日本語化して遊んでも良さそうです.

43496726104 221e9b9f27.jpg

追記)
以下の「Enable Steam Play for all titles」でWindows用のタイトルが全てProtonで起動できるようにできました.ただし実際に動作するかどうかはゲーム次第です.いくつか試してみましたが,Lutris経由のWine Steamで遊べるゲームでも動かなかったりしました.(Montaroとか)
20180826_07:08:32-9123

環境
20180826_14:08:02-28740

$ lsb_release -d
Description:    Debian GNU/Linux unstable (sid)
$ uname -m
x86_64

今回のSteamベータで対応していないものでWineで動作するゲームはLitrisでWine Steamを使うのもお手軽でおすすめです.

Mountainから山が消えて困る

Steamは今日からサマーセールですが,なんとなく久々にSteamのMountainを起動すると山が居ません.

20180622_02:06:49-1858

本来なら宇宙の中にこの靄に囲まれた山があるはずなんですが居ません.キーを叩くとピアノが弾けるはずなのですがこれも無反応..で山の意思は聞こえます.

コミニュティガイドを見ながら以下のあたりを試そうとするもピアノが弾けないせいか反応がありません.

リセット : SBN,ASSSS
山を作り直す。(今の山は消滅する。)

隠しメニュー : FS,N,SFS,N,S,
山の年齢や木の数などが見られる。
LOADで事前にセーブした時点の山まで戻ることができる。
REGENは山を作り直す。

多分データがおかしくなったのだろうとアンインストールしてインストールし直しても駄目です.Windows/Macでは以下のような情報が.

データの初期化方法
山がバグってどうしようもなくなった人が居たので(山を破壊するコマンドも無意味だった)データ初期化の方法を記しておきます。

Windows: C:\Users\USERNAME\AppData\LocalLow\Trash\Mountain
Mac:   Users\Library\Caches\Unity.Trash.Mountain

にあるファイルを削除すれば初期化することができます。

findコマンドの-mmin~/.steam, ~/.config辺りを探してみるとそれらしいディレクトリを発見.
'~/.config/unity3d/David OReilly' このディレクトリを退避してみましたが変化はありません.

SteamのMountainのプロパティを見てみると,「アップデート」タブに「Steam クラウド」という項目がありました.

20180622_01:06:30-22237

このチェックを外して,'~/.config/unity3d/David OReilly'を削除してみたところ初期状態になりました!

20180622_02:06:24-2233

そして新しい山が作れました :)

20180622_02:06:12-2785

てことで山を眺めることが出来るようになりました.

20180622_02:06:27-2930

Mountainが気になる人は7/6迄サマーセール49% offで50円なので気になる方は買ってみてはどうでしょう.操作はコミニュティガイドの日本語を読むと良いです.Linux版もあるのでWineSteamとかを挟まなくても遊べます.

ところで先日移動中にMauntainのような桜島を見かけました.
IMGP5151IMGP5160IMGP5162IMGP5164

SteamのアプリがAndroidでリモートプレイが出来るSteam Linkを試す

20180521_01:05:06-2769

AndroidでSteamのホームストリーミングで遊べるSteam Linkというアプリが公開されていたのでちょっと試してみました.

先ずはPCのSteamでホームストリーミングを有効にしておきます.
20180519_01:05:27-31428

firewallはこの辺りを参考に空けておきます.

ホームストリーミングだけならこの辺?

UDP 27031 and 27036 (incoming, for In-Home Streaming)
TCP 27036 and 27037 (incoming, for In-Home Streaming)

PCでSteamを起動した状態でAndroidのSteam Linkを起動したらPCが見つかりました.しかしネットワークテストがいまいち.Wi-Fiが2.4GHz 11gの54MbpsでHostのPCもClientのAndroidも同じAPなのでこのままでは無理がありますね…….

Screenshot_20180519-015144

とりあえず強行してみるとHostPC側では動いていますが,Androidでは表示が崩れてこんな感じ.

Screenshot_20180519-015239

ちなみにHostPCはCore2DuoかつGPUもCPUのものなのでかなりスペック低いのでそのせいもありそうです.
近いうちに回線は有線1GHz+Wi-Fi 300Mbpsの環境で試してみようと思います.

このアプリケーションはPCのHost側もゲーム画面を表示してそれをAndroidに転送して動いているのでPCで別の作業をするという向けには使いづらい感じです.もし併用するなら仮想画面や別モニタに別のXを動かすとかしないといけないと思います.
とはいえAndroidでSteamゲームが遊べるのは便利そう.それにまだBETAなのでもっと良くなるでしょう.

add 2018-05-26)
iOS版はblockされたようです(◞‸◟)

Debian の Steam が起動しなくなったので調べる

Debian stretch testing amd64 で steam:i386 パッケージで導入した Steam が起動しなくなっていました.

端末で直に叩くとこんな感じで怒られていました.

$ steam
find: The relative path '~/usr/local/bin' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find.  Please remove that entry from $PATH

PATH から ~/usr/local/bin を抜くとOK
PATH を /home/user/usr/local/bin としてもOK
てことで ~/.profile の ~ を $HOME に書き換えました.

- PATH="~/usr/local/bin:$PATH"
+ PATH="$HOME/usr/local/bin:$PATH"

とりあえずこれで動くようになりました.

Steam では最近は Unturned とかで遊んでいます.最近は Linux で動くゲームも増えて嬉しいです :)