機能と仕様
Vault-ZIP が何をするか、どこまで確かめたかを、具体的に書いたページです。数値は開発用の PC で測ったもので、環境によって変わります。
ZIP を作る
| 暗号の方式 | AES-256(WinZip AES 形式)。鍵はパスワードから PBKDF2 で作り、ファイルごとに改ざんの検出用の値(HMAC)を付けます。古い ZipCrypto 方式では作りません。 |
|---|---|
| パスワード | 新しく作る(長さと文字の種類を設定で決める)、決めておいたものを使う、毎回入力する、付けない、から選べます。作ったパスワードは台帳に記録します。 |
| 作った後の確認 | 書き終えた ZIP を最後まで読み直し、すべてのファイルが元と同じに取り出せることを確かめてから完成にします。完成した ZIP の SHA-256 も記録します。 |
| ファイル名 | UTF-8 で書きます(UTF-8 であることを示す印を付けます)。名前は NFC にそろえるので、Mac で作った名前も Windows で同じに見えます。 |
| 個別に圧縮 | 選んだファイルやフォルダーを 1 つずつ別の ZIP にします。 |
| 上書きしない | 同じ名前のファイルがあるときは、名前に (2) を付けます。既存のファイルを上書きするのは、設定で選んだときだけです。 |
展開する
| 形式 | ZIP(Deflate、Deflate64、BZip2、LZMA、XZ、Zstandard、PPMd、古い PKZIP 1.x の方式、AES-256、ZipCrypto)、7z(暗号化したヘッダーを含む)、RAR(1.5〜7、RAR5、暗号化、ソリッド)、tar と tar.gz・tar.bz2・tar.xz・tar.zst、単体の gz・bz2・xz・zst、CAB、MSI、自己展開形式(7z、ZIP、RAR)。 |
|---|---|
| 形式の見分け方 | 拡張子ではなく、ファイルの中身で見分けます。拡張子が違っていても展開できます。 |
| 外部ツール | ISO、LZH、ARJ、NSIS、Inno Setup などは、7-Zip などを設定で有効にしたときだけ、そのツールで展開します(既定はオフ)。 |
| 台帳のパスワード | Vault-ZIP で作った ZIP は、台帳に記録したパスワードで開きます。 |
| 改ざんの検出 | AES で暗号化した ZIP は、全ファイルの HMAC が合ったときだけ成功にします。合わなければ、途中のファイルを完成品として残しません。HMAC が合うことは「暗号化したデータが変わっていない」ことを示すもので、作った人を証明するものではありません。 |
ファイル名の扱い
どの OS で作った ZIP を、どの OS で展開しても、同じフォルダーの形になることを目指しています。
- 古い日本語の ZIP:Shift_JIS で名前を書いた ZIP(古い Windows のソフトで作ったもの)を自動で見分け、正しい日本語の名前で展開します。「表」「ソ」のように 2 バイト目が
\になる文字も正しく扱います。 - Mac の名前:Mac の分解された濁点(NFD)を NFC にそろえます。
- Mac の付属ファイル:
__MACOSXフォルダーと._で始まるファイルは作りません(設定で作ることもできます)。作らなかった数を結果に出します。 - Windows で使えない名前:
CONなどの予約名、?や:を含む名前、末尾のピリオドは、使える名前に置き換えて展開し、どれを置き換えたかを一覧で知らせます。 - 見えない文字:文字の向きを変える文字(
invoiceexe.pdfと PDF に見せかけて、本当は .exe という手口に使われる)やゼロ幅の文字、制御文字は_に置き換え、画面では\u{202E}のような見える形で示します。 - 大文字と小文字だけが違う名前:Windows では同じ名前になるため、片方に (2) を付けて両方残します。
悪意のある圧縮ファイルへの備え
次のものは、展開の前か途中で止めるか、無害な形にします。どれも自動テストで毎回確かめています。
- フォルダーの外へ書き出そうとする名前(
../、絶対パス、ドライブ指定)。何かを書く前に止めます。 - シンボリックリンク、ジャンクション、デバイスなどの特殊なファイル。作りません。
- 展開すると巨大になるファイル(ZIP 爆弾)。ヘッダーの宣言を信じず、書いたバイト数を自分で数えて止めます。
- 10 万件を超えるファイル。続けるかを確かめます。
- 壊れたファイル。42,000 個の壊れた RAR、300 個の壊れた CAB、ファジング(無作為な入力を大量に与える試験)で、クラッシュしないことを確かめています。
- 展開中のディスク満杯や強制終了。途中のファイルを完成した名前で残さず、次の起動で片付けます。
パスワードの台帳
| 保存 | SQLCipher(AES-256)で暗号化したデータベース。鍵は Windows の資格情報マネージャーに保存します。ポータブル版は、利用者が決めたパスフレーズで守ります。 |
|---|---|
| 記録する内容 | ZIP や PDF の名前、作った日時、パスワード、メモ、元のファイルの一覧。 |
| 表示とコピー | パスワードは、「表示」を押したときだけ画面に出します。表示の前に Windows Hello などの本人確認を求められます。コピーしたパスワードは、Windows のクリップボード履歴(Win+V)とほかのデバイスへの同期に入らないようにし、しばらくすると消えます。その間に別のものをコピーした場合は、そちらを消しません。 |
| 画面に写さない | 設定で、パスワードを表示しているウィンドウを、画面共有・録画・スクリーンショットに写さないようにできます(既定はオフ。Windows 10 バージョン 2004 以降)。 |
| 備え | 回復キー、暗号化したバックアップの書き出しと読み込み、自動バックアップ。読み込みに失敗したときは、今の台帳と鍵をそのまま残します。 |
| 版をまたいだ読み込み | 台帳の形式を新しくするときは、先に写しを作ります。新しい版で作ったデータを古い版で開いたときは、書き換えずに止めて知らせます。 |
PDF の暗号化
| 方式 | AES-256(PDF 2.0 の方式、R6)。開くためのパスワードを付け、台帳に記録します。 |
|---|---|
| 確かめたビューアー | pdfium(Chrome、Edge、Android の表示の部品)、pdf.js(Firefox の表示の部品)、qpdf で、正しいパスワードで開けること、違うパスワードを拒むこと、日本語のテキストが元と同じに取れることを確かめています。 |
| 作った後の確認 | 暗号化した PDF を読み直し、中身が元と同じかを確かめます。 |
何のファイルか調べる
拡張子ではなく中身から、ファイルの種類と、ふつう何のアプリで開くかを調べます。ファイルを開いたり実行したりはしません。1 ファイルあたりおよそ 0.1 ミリ秒です(作者の PC、SSD)。結果は推定で、安全かどうかの判定ではありません。
通信
利用者が頼んだときだけ、外とつながります。更新の自動確認、利用状況の送信、ライセンスの確認のための通信、アカウントはありません。
- 画面を描く Microsoft の部品(WebView2)は、何もしなくても Microsoft のサーバーへ接続することがあります。Vault-ZIP は、その自発的な通信を止める設定でウィンドウを作ります。作者の計測では、起動から 100 秒のあいだ、外への接続は 0 件でした。
- 外とつながるのは、案内のリンクを押してブラウザーが開くとき、共有で選んだアプリにファイルを渡すとき、WebView2 の入っていない PC でインストーラーがそれを取得するときだけです。
- Windows 版には、インターネットにつなぐための部品を入れていません。
ほかのソフトとの互換性
Vault-ZIP で作った AES-256 の ZIP を、次のソフトで開けることを確かめています。
| ソフト | 確かめたこと |
|---|---|
| 7-Zip 26.05 | パスワードで開け、圧縮の強さ 3 通りで全ファイルが元と同じ(SHA-256 で比較)。日本語の名前と入れ子のフォルダーも正しく出る。 |
| Windows 11 のエクスプローラー | パスワードを聞かれ、展開できる。日本語、全角かっこ、絵文字の名前とサイズが正しく見える。 |
Windows の tar.exe | パスワードを渡して、全ファイルが正しいサイズで展開できる。 |
逆に、7-Zip 26.05 で作った 7z(暗号化したヘッダーを含む)、自己展開形式、各種の方式の ZIP、tar を Vault-ZIP で展開し、全ファイルが元と同じことを確かめています。
Lhaplus、CubeICE などでの確認は、これから行います。
性能
作者の PC(Ryzen 5 5600X、メモリ 32 GB、NVMe SSD と 5,400 rpm の HDD)での測定です。圧縮の時間には、作った後の確認の読み直しを含みます。
| 測ったもの | 結果 |
|---|---|
| 5 GB のファイル 1 つ(SSD、AES-256) | 圧縮 約 116 MB/秒、展開 約 267 MB/秒 |
| メモリの使用量(ファイル 1 つ、100 GB まで) | 13 MB 前後で、大きさによって増えない |
| 10 万件の小さなファイル | メモリ 100 MB 以下で完了 |
| 右クリックから開く小さな画面 | 約 0.4 秒で表示 |
コマンドライン版(RPA 向け)
vault-zip-cli.exe:圧縮、展開、PDF の暗号化、台帳の検索などを、Power Automate for desktop などから使えます。- 結果を JSON で受け取れ、終了コードで成否と理由を判定できます。
- パスワードはコマンドラインに書かず、標準入力で渡します(コマンドラインの文字列は、ほかのプログラムから見えることがあるため)。
- 起動は約 14 ミリ秒です。
組織向けの管理(ライセンスが必要)
- MSI で PC ごとにインストール。配布ツールでの一括インストールに使えます。
- 管理者が決めたルールを、利用者は変えられません:パスワードなしの ZIP を禁止、パスワードの方式と最短の桁数、作った後の確認を常にオン、パスワードの表示中は画面に写さない、台帳の自動バックアップ先の固定、外部ツールの禁止など。
- ルールは、アプリの画面、組織の設定ファイル、グループポリシー(ADMX)、Intune で配れます。
- ライセンスは PC の中だけで確かめます。ライセンスサーバーはありません。
配布物
- 配布するファイルの SHA-256 をダウンロードのページに載せます。
- 使っている部品の一覧(SBOM、CycloneDX 形式)と、各部品のライセンスの全文を同梱します。
- 脆弱性の報告の窓口はセキュリティのページにあります。
動作環境
| Windows | Windows 10 以上(64 ビット、x64)。Windows 11 では新しい右クリックメニューにも出ます。ARM 版 Windows では確かめていません。 |
|---|---|
| Android | Google Play |
| 言語 | 日本語(英語は準備中) |