Age
age (Actually Good Encryption)는 FiloSottile이 개발한 모던 파일 암호화 도구로, GPG의 복잡함을 대체하기 위해 설계되었다. 단순한 CLI와 명확한 키 포맷이 특징이며, 네이티브 키 또는 SSH 키로 암호화할 수 있다. sops의 권장 키 백엔드이기도 하다.
핵심 특징
- 간단하고 현대적이며 안전한 파일 암호화 도구 이자, 포맷, 그리고 Go 라이브러리
- 작은 명시적 키, 설정 옵션 없음, UNIX 스타일의 조합성을 특징으로 함
- YubiKeys 같은 하드웨어 PIV 토큰도 플러그인을 통해서 지원
- 그외 다양한 플러그인이 있음 : Apple Secure Enclave, TPM, FIDO, SSS, Trezor Hardware Wallet,..
~/.ssh/id_ed25519, ~/.ssh/id_rsa로 바로 암호화/복호화 가능 -r 플래그 반복) -p 플래그) 키 포맷
# 공개키 (Public Key) — 공유 가능
age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
# 개인키 (Secret Key) — 절대 비공개
AGE-SECRET-KEY-1QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
GPG와 달리 키 서버, 신뢰 모델(Web of Trust), 만료일, 서브키 등의 복잡한 개념이 없다.
설치
# Linux
sudo apt install age
# 또는
curl -LO https://github.com/FiloSottile/age/releases/download/v1.2.1/age-v1.2.1-linux-amd64.tar.gz
# macOS
brew install age
# Docker (멀티스테이지 빌드에서 복사)
COPY --from=ghcr.io/FiloSottile/age:latest /age /usr/local/bin/age
키 생성
# age 네이티브 키 생성
age-keygen -o ~/.sops/age-key.txt
# Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
# 공개키만 추출
age-keygen -y ~/.sops/age-key.txt > ~/.sops/age-key.pub
기본 사용법
# age 키로 암호화
age -r age1ql3z7hjy54pw3h... -o secret.age secret.txt
# 복호화
age -d -i ~/.sops/age-key.txt -o secret.txt secret.age
# SSH 공개키로 암호화 (별도 age 키 불필요)
age -R ~/.ssh/id_ed25519.pub -o secret.age secret.txt
# SSH 개인키로 복호화
age -d -i ~/.ssh/id_ed25519 -o secret.txt secret.age
# 패스프레이즈 모드 (키 파일 없이)
age -p -o secret.age secret.txt
# 다중 수신자
age -r age1xxx... -r age1yyy... -o secret.age secret.txt
# 파이프라인
cat secret.txt | age -r age1xxx... | base64 > encrypted.b64
echo "hello" | age -r age1xxx... | age -d -i key.txt
GPG와 비교
| 항목 | GPG | age |
| 키 생성 | | |
| 키 포맷 | Keyring 바이너리 (pubring.kbx) | 단순 텍스트 파일 |
| 키 관리 | 서브키, 만료일, 신뢰 모델, 키 서버 | 없음 (공개키/개인키 파일만 관리) |
| SSH 키 호환 | ❌ (gpg-agent로 우회 가능) | ✅ 네이티브 지원 |
| 서명 기능 | ✅ | ❌ (암호화 전용, 서명은 minisign 사용 권장) |
| 설정 파일 | | 없음 |
Docker 컨테이너에서 사용
# age 키 파일만 마운트하면 동작
docker run --rm \
-v ~/.sops/age-key.txt:/run/age-key.txt:ro \
-v $(pwd):/work \
myapp age -d -i /run/age-key.txt -o /work/secret.txt /work/secret.age
Python 연동
import subprocess
def age_encrypt(data: bytes, recipient: str) -> bytes:
"""age로 데이터 암호화 / Encrypt data with age"""
result = subprocess.run(
["age", "-r", recipient],
input=data, capture_output=True, check=True
)
return result.stdout
def age_decrypt(data: bytes, key_file: str) -> bytes:
"""age로 데이터 복호화 / Decrypt data with age"""
result = subprocess.run(
["age", "-d", "-i", key_file],
input=data, capture_output=True, check=True
)
return result.stdout
See also
- sops - age를 키 백엔드로 사용하는 secret 관리 도구
- GPG - age가 대체하고자 하는 레거시 암호화 도구
- minisign - age와 함께 사용하는 경량 서명 도구 (age는 서명 미지원)
- SSH - age가 SSH 키를 직접 지원
- vault
- keyring
- SideKick - 명령어 2개로 어떤 앱이든 VPS에서 셀프호스팅하게 해주는 CLI 도구
Favorite site
- GitHub — FiloSottile/age — 공식 저장소
- age-encryption.org — 공식 사이트 및 스펙 문서
- rage — age의 Rust 구현체
- pyrage — Python 네이티브 age 라이브러리 (subprocess 불필요)