テキストファイルにパスワードをかける前に — 1Passwordのセキュアノートと保管庫

開発misc-devメモ

テキストファイルにパスワードをかける前に — 1Passwordのセキュアノートと保管庫

結論

  • テキストファイル自体にパスワードをかける機能はない。7-Zip か gpg で暗号化コンテナに入れるのが定石
  • ただし守る対象によって手段が変わる。短い秘密は1Password、量のある業務データはディスク全体の暗号化、外に渡すときだけzip暗号化という3つの切り分けになる
  • 1Passwordにテキストを置くなら、ファイルのまま置く「Document」より、本文を貼る「セキュアノート」が向く。本文が検索対象になるかどうかで使い勝手が大きく変わる
  • 1Passwordにフォルダはない。保管庫(Vault)は共有の境界線で、分類はスラッシュ区切りのタグで階層化する

きっかけ

手元に Period.txt という参照用のテキストファイルがあり、これにパスワードをかけたかった。中身は自分だけが見ればよいメモで、他人に見られると困る。

調べ始めてすぐ、前提が違うことに気づいた。テキストファイルはパスワードを持てない。Word や Excel と違い、ファイル形式に暗号化の仕組みが入っていないからだ。だから「txtにパスワードをかける」は、正確には「txtを暗号化した入れ物に入れる」になる。

そこまでは分かったが、次の疑問が出てきた。そもそもローカルに暗号化ファイルを置く運用でいいのか。全部1Passwordに入れた方が早いのではないか。

まずtxtを暗号化する方法

環境はWindows 11。3つの選択肢がある。

7-Zip(相手にも渡しやすい)

& "C:\Program Files\7-Zip\7z.exe" a -t7z -p -mhe=on secret.7z Period.txt
  • -p の後にパスワードを書かないと、対話で入力を求められる。コマンド履歴に残らない
  • -mhe=on はファイル名まで隠す指定。7z形式でのみ効く
  • -sdel を付けると、暗号化後に元ファイルを削除する

エクスプローラーの右クリックメニューからも同じことができる。「7-Zip」→「圧縮」で、暗号化欄にパスワードと暗号化方式AES-256を指定する。

gpg(ファイル1個を直接暗号化)

gpg -c --cipher-algo AES256 Period.txt   # Period.txt.gpg ができる
gpg -d Period.txt.gpg > Period.txt       # 復号

鍵ペアを作らない共通鍵方式なので、相手にはパスフレーズだけ伝えれば開く。Git for Windows を入れていれば gpg は既に入っている。

Windows標準のEFS(用途が違う)

ファイルのプロパティ →「詳細設定」→「内容を暗号化してデータをセキュリティで保護する」。

これはWindowsアカウントに紐づく暗号化で、パスワードを別に設定するものではない。同じアカウントでログインしていれば意識せず開けるため、他人に渡すファイルを守る用途には向かない。PCの盗難対策として働く。

守る対象で手段を分ける

ここが今回の整理の中心になる。暗号化zipを作る前に、何から守りたいのかを決める必要がある。

守る対象手段理由
パスワード、APIキー、マイナンバー、口座番号1Password小さくて、めったに編集せず、漏れると致命的
業務データ本体(PDF、仕訳データ、スキャン書類)ディスク全体の暗号化(BitLocker)量が多く、編集頻度も高い
外部に渡すファイルzip暗号化経路上で第三者の手を経由する

小さい秘密は1Passwordへ

短い機密文字列をローカルの暗号化zipで持つのは筋が悪い。そのzipを開くパスワードをどこかに保管する必要が出て、同じ問題が一段ずれるだけだからだ。1Passwordに入れれば、生成・共有・失効・端末間同期が全部ついてくる。

.env の中身も同じで、1Password Environments に移せばローカルの平文ファイルを減らせる。

→ 1Password Environments のドキュメント

業務データはディスク全体で守る

顧客の申告資料PDFや仕訳データは、1Passwordのドキュメント保管枠に収まらない。枠は個人アカウントで1GB、ファミリーは1人あたり1GB、ビジネスは1人あたり5GBとされている。読み書きの頻度も高く、出し入れのたびに平文がローカルに落ちる。

→ 1Password にファイルを保存する(公式ドキュメント)

この層はBitLockerでディスクごと暗号化するのが合う。ディスク全体を暗号化すれば、個別ファイルにパスワードをかける必要はほぼ消える。PCの盗難・紛失という脅威にはこれで足りるからだ。

状態は管理者権限のPowerShellで確認できる。

manage-bde -status C:

変換状態: 完全に暗号化されました かつ 保護の状態: 保護はオン なら有効になっている。

zip暗号化が残るのは受け渡しのとき

メール添付、共有ストレージへの設置、クラウド経由の受け渡し。これらの場面だけzip暗号化が要る。パスワードは1Passwordで生成し、アイテムの共有リンクで相手に渡す。ファイル本体と鍵を別の経路に流すためだ。

1Passwordにテキストを保存する2つの方法

1Passwordはテキストファイルをそのまま保存できる。ただし方法が2つあり、性格が違う。

Documentアイテムセキュアノート
保存形式.txt をファイルのまま本文テキストを貼り付け
入れ方アプリにドラッグ&ドロップ新規作成 →「セキュアノート」
中身の検索対象外本文が検索対象
読むときプレビューかダウンロードアプリ内でそのまま表示
スマートフォン開くのに一手間かかるすぐ読める
編集新版を差し替えるその場で書き換え
容量枠ドキュメント保管枠を消費実質気にしなくてよい

検索の差は公式ドキュメントで確認できる。検索結果に含まれるものとして挙げられているのは、タイトル・セクション・フィールド・ノートが一致した項目だ。保存したファイルの中身はここに入っていない。セキュアノートの本文はここでいう「ノート」にあたるため、中身の単語で辿り着ける。

→ 1Password の検索についての公式ドキュメント

参照用のメモなら、セキュアノートを選ぶ。開くたびにプレビューかダウンロードが挟まるDocumentは、頻繁に見る用途だと手間になる。

Documentが向くのは、ファイルとして取り出す前提のものだ。SSH秘密鍵、証明書、リカバリーコードのファイルなどが該当する。

コマンドラインからも操作できる

# セキュアノートとして中身を入れる
op item create --category="Secure Note" --title="Period メモ" \
  --vault="Private" notesPlain="$(cat Period.txt)"

# 読み出す
op item get "Period メモ" --fields label=notesPlain --reveal

読み出しでつまずきやすいのが --fields の書き方だ。--fields notesPlain ではなく --fields label=notesPlain と書く。label= はフィールドを名前で指定する接頭辞にあたる。値が伏せ字で返る場合は --reveal を付ける。

# ファイルのまま入れる
op document create ./Period.txt --title "Period" --vault Private

# 取り出す
op document get "Period" --out-file ./Period.txt

取り出しのフラグは --output ではなく --out-file(短縮形は -o)。しかも既存ファイルを上書きしないので、出力先は存在しないパスを指定する。

→ op item コマンドのリファレンス

→ op document コマンドのリファレンス

既存アイテムへのファイル添付もできる。銀行のログイン情報に手順書のテキストを添付しておくと、認証情報とメモが1箇所にまとまる。

取り出し方は3通り

クイックアクセス(主導線)

Ctrl + Shift + Space を押すと、どのアプリの上からでも検索窓が出る。アプリに切り替えなくていい。数文字打ってEnterでコピーできる。

これがWindowsでの初期設定のショートカットだ。変更したければ、サイドバー上部のアカウントを選び「設定」→「一般」の「ショートカット」を開く。

参照用メモを1Passwordに置くなら、これが実際の使い方になる。「アプリを開いて探す」という手順を想像すると面倒に思えるが、実際にはこのショートカットで完結する。

→ クイックアクセスの公式ドキュメント

アプリ本体

サイドバーで保管庫やタグを辿るか、Ctrl + F で検索する。一覧して整理したいときに使う。

コマンドライン

前述の op item get を使う。スクリプトから読む場合はこの経路になる。

フォルダはない — 保管庫とタグで整理する

1Passwordに従来のフォルダはない。代わりに2つの仕組みがある。

保管庫(Vault)タグ
入れ子できない親/子/孫 で階層化できる
役割共有の境界線分類・絞り込み
1アイテムの所属1つだけ複数付けられる
使いどころ個人用/事務所共有/顧客共有用途・顧客・案件で分類

ここで押さえておきたいのは、保管庫が「誰と共有するか」で切るものだという点だ。フォルダ感覚で細かく作ると、共有設定が煩雑になって管理しきれなくなる。分類はタグでやる。

タグはスラッシュ区切りで書くと、サイドバーに入れ子で表示される。見た目はフォルダとほぼ同じになる。既存のアイテムにタグを付けるときは、サイドバーのタグへアイテムをドラッグしてもいい。

→ お気に入りとタグで整理する(公式ドキュメント)

保管庫:  Private(自分だけ)
        事務所共有
        クライアント共有(必要な場合のみ)

タグ:    顧客/A社
        顧客/B社
        業務/確定申告
        業務/年末調整
        インフラ/データベース
        インフラ/デプロイ

1アイテムに 顧客/A社業務/確定申告 の両方を付けられる。フォルダだと「顧客で分けるか業務で分けるか」を最初に決める必要があるが、タグならどちらからでも辿れる。

タグ設計に凝りすぎない

実際に使ってみると、タグを整えるよりタイトルを検索しやすい言葉にする方が効くCtrl + Shift + Space から2〜3文字打てば当たるので、階層を辿る操作はほとんど発生しない。

タグは「あとで一覧したいとき」の保険と考えておくくらいがちょうどいい。

まとめ

txtにパスワードをかける方法を探していたが、答えは手段の選択ではなく対象の切り分けだった。

  • 短い秘密 → 1Passwordのセキュアノート。検索で引けるので参照用に向く
  • 業務データ → BitLockerでディスクごと暗号化。個別のパスワードは不要になる
  • 渡すファイル → zip暗号化。パスワードは別経路で渡す

1Passwordの整理はフォルダではなく、保管庫(共有の境界)とタグ(分類)の2軸で考える。タグはスラッシュ区切りで階層化できるので、フォルダが恋しくなることはない。

なお、機密を含むアイテムの読み出しをAIエージェントに任せるのは避けたい。op item get --fields label=notesPlain --reveal は中身を平文で出力するため、顧客情報を含むものは自分のターミナルかアプリ側で扱う。

#1Password#パスワード管理 #セキュリティ #Windows#BitLocker