テキストファイルにパスワードをかける前に — 1Passwordのセキュアノートと保管庫
テキストファイルにパスワードをかける前に — 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 をファイルのまま | 本文テキストを貼り付け |
| 入れ方 | アプリにドラッグ&ドロップ | 新規作成 →「セキュアノート」 |
| 中身の検索 | 対象外 | 本文が検索対象 |
| 読むとき | プレビューかダウンロード | アプリ内でそのまま表示 |
| スマートフォン | 開くのに一手間かかる | すぐ読める |
| 編集 | 新版を差し替える | その場で書き換え |
| 容量枠 | ドキュメント保管枠を消費 | 実質気にしなくてよい |
検索の差は公式ドキュメントで確認できる。検索結果に含まれるものとして挙げられているのは、タイトル・セクション・フィールド・ノートが一致した項目だ。保存したファイルの中身はここに入っていない。セキュアノートの本文はここでいう「ノート」にあたるため、中身の単語で辿り着ける。
参照用のメモなら、セキュアノートを選ぶ。開くたびにプレビューかダウンロードが挟まる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)。しかも既存ファイルを上書きしないので、出力先は存在しないパスを指定する。
既存アイテムへのファイル添付もできる。銀行のログイン情報に手順書のテキストを添付しておくと、認証情報とメモが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 は中身を平文で出力するため、顧客情報を含むものは自分のターミナルかアプリ側で扱う。