Skip to content

Age

age (Actually Good Encryption)는 FiloSottile이 개발한 모던 파일 암호화 도구로, GPG의 복잡함을 대체하기 위해 설계되었다. 단순한 CLI와 명확한 키 포맷이 특징이며, 네이티브 키 또는 SSH 키로 암호화할 수 있다. sops의 권장 키 백엔드이기도 하다.

핵심 특징

  • 간단하고 현대적이며 안전한 파일 암호화 도구 이자, 포맷, 그리고 Go 라이브러리
  • 작은 명시적 키, 설정 옵션 없음, UNIX 스타일의 조합성을 특징으로 함
  • YubiKeys 같은 하드웨어 PIV 토큰도 플러그인을 통해서 지원
    • 그외 다양한 플러그인이 있음 : Apple Secure Enclave, TPM, FIDO, SSS, Trezor Hardware Wallet,..
  • 다양한 언어로 구현된 버전 : Go, Rust, TypeScript, Java, WASM, Elixir, Dart 등
  • 맥, 리눅스, FreeBSD, 윈도우 용 바이너리 제공
  • 포맷이 공개 되어있음 age-encryption.org/v1
  • 단순한 설계 - 설정 파일 없음, 옵션 최소화, 키 포맷이 직관적
  • SSH 키 호환 - 기존 ~/.ssh/id_ed25519, ~/.ssh/id_rsa로 바로 암호화/복호화 가능
  • 다중 수신자 - 여러 공개키로 동시에 암호화 가능 (-r 플래그 반복)
  • 패스프레이즈 모드 - 키 없이 패스프레이즈만으로 암호화 가능 (-p 플래그)
  • 스트림 암호화 - 파이프라인 친화적, stdin/stdout 지원

키 포맷

# 공개키 (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

키 생성

gpg --full-generate-key (대화형, 복잡)

age-keygen (한 줄)

키 포맷

Keyring 바이너리 (pubring.kbx)

단순 텍스트 파일

키 관리

서브키, 만료일, 신뢰 모델, 키 서버

없음 (공개키/개인키 파일만 관리)

SSH 키 호환

❌ (gpg-agent로 우회 가능)

✅ 네이티브 지원

서명 기능

❌ (암호화 전용, 서명은 minisign 사용 권장)

설정 파일

~/.gnupg/gpg.conf 등 다수

없음

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