Linux

Linux 使用 age 簡潔的加密、解密工具使用教學與範例

介紹如何使用 age 加密工具,對檔案進行加密與解密。

age 是一個開放原始碼的檔案加密工具,同時也是一種檔案加密格式,它的特點是金鑰格式簡潔,沒有複雜的設定檔,同時也遵循傳統 UNIX 工具的設計風格,可以非常快速且方便地與各種 UNIX 指令工具結合使用。

安裝 age 加密工具

若在 Ubuntu Linux 22.04 以後的系統中,可以使用 apt 安裝 age 加密工具:

# 安裝 age 加密工具
sudo apt install age

各種作業系統中大部分常見的套件管理系統都已經收錄了 age,關於其他作業系統的安裝方式,可以參考 age 官方網站上面的說明。

產生 X25519 金鑰

原生的 age 金鑰可以使用 age-keygen 這個工具產生,採用的協議是 X25519,金鑰格式精簡、安全性也很高:

# 產生 X25519 金鑰儲存至 key.txt
age-keygen -o key.txt
Public key: age1ega7s73mj75afdjqt8l9rwulv4rlc35deys8fs83k6lu4zn9mgzsd5gvqx

而產生的私鑰檔案 key.txt 內容則為:

# created: 2023-05-31T19:56:38+08:00
# public key: age1ega7s73mj75afdjqt8l9rwulv4rlc35deys8fs83k6lu4zn9mgzsd5gvqx
AGE-SECRET-KEY-1SEMXS5JAR97MADJVX52W25N7ZXAM47RFT2GMURH5R2XDMHAZAZAQYW2RWD

age-keygen 指令加上 -y 參數可以從檔案或標準輸入讀入私鑰,然後輸出接受者(recipient)清單:

# 產生接受者清單
age-keygen -y key.txt
age1ega7s73mj75afdjqt8l9rwulv4rlc35deys8fs83k6lu4zn9mgzsd5gvqx

這個動作實際就輸出對應的公鑰。若輸入的資料中包含多筆私鑰,就會以一行一筆的方式對應輸出多筆公鑰。

使用 X25519 金鑰加密、解密檔案

在以 age-keygen 產生了 X25519 的公鑰與私鑰之後,就可以使用公鑰進行加密:

# 使用公鑰加密 secret.txt 檔案
age -o secret.txt.age \
  -r age1ega7s73mj75afdjqt8l9rwulv4rlc35deys8fs83k6lu4zn9mgzsd5gvqx \
  secret.txt

這裡的 secret.txt 就是要進行加密的檔案,-o 參數用於指定加密後的輸出檔案為 secret.txt.age,而 -r 參數則是以公鑰指定接收者,加密之後只能使用對應的私鑰進行解密,若要同時發送給多位接收者,可以使用多個 -r 參數指定多組公鑰。

# 同時指定兩位接收者(公鑰)
age -o secret.txt.age \
  -r age1ega7s73mj75afdjqt8l9rwulv4rlc35deys8fs83k6lu4zn9mgzsd5gvqx \
  -r age18u75pyg9mq6hc95h3s2n4wl5g5aj67905ws0yrtcz2gflz97qfqsunhn9m \
  secret.txt

如果要指定的接收者數量很多,可以將所有接收者的公鑰以一行一筆公鑰的格式寫在檔案中,再以 -R 參數指定公鑰的清單檔案,例如:

# 使用清單檔案指定大量接收者公鑰
age -o secret.txt.age -R recipients.txt secret.txt

經過 age 加密之後的檔案,可以使用對應的私鑰進行解密:

# 使用私鑰解密 secret.txt.age 檔案
age -d -o output.txt -i key.txt secret.txt.age

這裡的 -d 參數代表解密動作,-i 參數是用來指定解密用的私鑰,而 -o 參數則是指定輸出的檔案。

如果在以 age 加密時指定多筆接收者公鑰,則加密之後的檔案就可以使用任何一位接收者的私鑰進行解密。

使用密碼加密、解密檔案

age 也可以使用普通的密碼進行檔案的加密與解密:

# 使用密碼加密 secret.txt 檔案
age -o secret.txt.age -p secret.txt

這裡的 -p 參數代表以密碼進行加密,執行後 age 會從終端機上要求使用者輸入要用來加密的密碼,而 -o 參數則是指定加密後的輸出的檔案。

若要解密以密碼加密之後的檔案,也同樣是使用 -d 參數,執行時 age 同樣會從終端機上要求使用者輸入密碼以進行解密:

# 使用密碼解密 secret.txt.age 檔案
age -o output.txt -d secret.txt.age

使用密碼保護 X25519 金鑰

如果希望 age-keygen 所產生的 X25519 金鑰可以加上密碼保護,可以將產生的 X25519 金鑰交給 age 以密碼加密:

# 以密碼保護 X25519 金鑰
age-keygen | age -p > key.age
Public key: age142m44qyhl3fqq5um6x6822mj36k39uzq0cdm9kurmclv76me4emqjtrzcv

使用公鑰加密的步驟不便:

# 使用公鑰加密 secret.txt 檔案
age -o secret.txt.age \
  -r age142m44qyhl3fqq5um6x6822mj36k39uzq0cdm9kurmclv76me4emqjtrzcv\
  secret.txt

以密碼保護的 X25519 金鑰檔案的使用方式都跟普通的金鑰檔案相同,差異只在於使用私鑰解密時,鑰從終端機輸入密碼:

# 使用有密碼保護的私鑰解密 secret.txt.age 檔案
age -d -o output.txt -i key.txt secret.txt.age

加密與壓縮

age 的工具都遵循傳統 UNIX 工具的設計風格,可以非常方便地與各種標準 UNIX 工具結合使用,最常見的用法是搭配壓縮指令,將資料壓縮之後再加密:

# 以 tar.bz2 壓縮後再加密
tar jc data | age \
  -r age1ega7s73mj75afdjqt8l9rwulv4rlc35deys8fs83k6lu4zn9mgzsd5gvqx \
  > data.tar.bz2.age

在解密時也可以搭配解壓縮指令一起處理:

# 解密後再解壓縮
age -d -i key.txt data.tar.bz2.age | tar jx

使用 SSH 金鑰進行加密、解密

age 除了使用 age-keygen 所產生的 X25519 金鑰之外,也可以使用普通 SSH 常用的 RSA 或 Ed25519 金鑰進行加解密。

# 產生 SSH 的 Ed25519 金鑰
ssh-keygen -t ed25519

# 使用 SSH 的 Ed25519 公鑰加密
age -R ~/.ssh/id_ed25519.pub secret.txt > secret.txt.age

# 使用 SSH 的 Ed25519 私鑰加密
age -d -i ~/.ssh/id_ed25519 secret.txt.age > output.txt

參考資料

Share
Published by
Office Guide
Tags: 資訊安全

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

10 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

11 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

11 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

11 個月 ago