
간단하고 현대적이며 안전한 암호화 도구(및 Go 라이브러리)로, 작고 명시적인 키를 사용하고 구성 옵션이 없으며 UNIX 스타일의 조합성을 제공합니다.
age는 간단하고 현대적이며 안전한 파일 암호화 도구, 형식, 그리고 Go 라이브러리입니다.
작고 명시적인 키, 양자 내성(포스트퀀텀) 지원, 설정 옵션 없음, UNIX 스타일의 조합성을 갖추고 있습니다.
$ age-keygen -o key.txt
Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
$ tar cvz ~/data | age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p > data.tar.gz.age
$ age --decrypt -i key.txt data.tar.gz.age > data.tar.gz
📜 형식 사양은 age-encryption.org/v1에서 확인할 수 있습니다. age는 @benjojo와 @FiloSottile가 설계했습니다.
🦀 상호 운용 가능한 대체 Rust 구현체는 github.com/str4d/rage에서 확인할 수 있습니다.
🌍 Typage는 TypeScript 구현체입니다. 브라우저, Node.js, Deno, Bun에서 작동합니다.
🔑 YubiKey와 같은 하드웨어 PIV 토큰은 age-plugin-yubikey 플러그인을 통해 지원됩니다.
✨ 더 많은 플러그인, 구현체, 도구 및 통합을 보려면 awesome age 목록을 확인하세요.
💬 저자는 이를 [aɡe̞]로 발음하며 딱딱한 g 소리로 GIF처럼 발음하고, 항상 소문자로 표기합니다.
Windows, Linux, macOS, FreeBSD에서는 사전 빌드된 바이너리를 사용할 수 있습니다.
사전 빌드된 바이너리를 다운로드한 경우 Sigsum 증명을 확인할 수 있습니다.
시스템에 지원되는 Go 버전이 있다면 소스에서 빌드할 수 있습니다.
go install filippo.io/age/cmd/...@latest
새로운 패키지 관리자의 도움을 환영합니다.
전체 문서는 age(1) 매뉴얼 페이지에서 확인하세요.
Usage:
age [--encrypt] (-r RECIPIENT | -R PATH)... [--armor] [-o OUTPUT] [INPUT]
age [--encrypt] --passphrase [--armor] [-o OUTPUT] [INPUT]
age --decrypt [-i PATH]... [-o OUTPUT] [INPUT]
Options:
-e, --encrypt 입력을 출력으로 암호화합니다. 생략 시 기본값입니다.
-d, --decrypt 입력을 출력으로 복호화합니다.
-o, --output OUTPUT 결과를 경로 OUTPUT의 파일에 씁니다.
-a, --armor PEM 인코딩 형식으로 암호화합니다.
-p, --passphrase 암호로 암호화합니다.
-r, --recipient RECIPIENT 지정된 RECIPIENT로 암호화합니다. 반복 가능합니다.
-R, --recipients-file PATH PATH에 나열된 수신자로 암호화합니다. 반복 가능합니다.
-i, --identity PATH PATH의 ID 파일을 사용합니다. 반복 가능합니다.
--version 버전을 출력합니다.
INPUT은 기본적으로 표준 입력이며, OUTPUT은 기본적으로 표준 출력입니다.
OUTPUT이 이미 존재하면 덮어씁니다.
RECIPIENT는 age-keygen으로 생성된 age 공개 키("age1...") 또는
SSH 공개 키("ssh-ed25519 AAAA...", "ssh-rsa AAAA...")일 수 있습니다.
수신자 파일에는 한 줄에 하나씩 하나 이상의 수신자가 포함됩니다. 빈 줄과
"#"으로 시작하는 줄은 주석으로 무시됩니다. "-"를 사용하면 표준 입력에서
수신자를 읽을 수 있습니다.
ID 파일에는 한 줄에 하나씩 하나 이상의 비밀 키("AGE-SECRET-KEY-1...")가
포함되거나 SSH 키가 포함됩니다. 빈 줄과 "#"으로 시작하는 줄은 주석으로
무시됩니다. 암호로 암호화된 age 파일을 ID 파일로 사용할 수 있습니다.
여러 키 파일을 제공할 수 있으며, 사용되지 않는 파일은 무시됩니다.
"-"를 사용하면 표준 입력에서 ID를 읽을 수 있습니다.
--encrypt가 명시적으로 지정된 경우, -i를 사용하여 일반 수신자 대신 또는
추가로 ID 파일에 대칭적으로 암호화할 수도 있습니다.
-r/--recipient를 반복하여 파일을 여러 수신자에게 암호화할 수 있습니다. 모든 수신자가 파일을 복호화할 수 있습니다.
$ age -o example.jpg.age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p \
-r age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg example.jpg
여러 수신자는 -R/--recipients-file 플래그로 전달되는 하나 이상의 파일에 한 줄에 하나씩 나열할 수도 있습니다.
$ cat recipients.txt
# Alice
age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
# Bob
age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg
$ age -R recipients.txt example.jpg > example.jpg.age
-R(또는 -i)의 인수가 -인 경우 파일은 표준 입력에서 읽습니다.
미래의 양자 컴퓨터 공격에 안전한 하이브리드 양자 내성 키를 생성하려면
age-keygen과 함께 -pq 플래그를 사용하세요. 이는 향후 기본값이 될 수 있습니다.
양자 내성 ID는 AGE-SECRET-KEY-PQ-1...로 시작하고 수신자는
age1pq1...로 시작합니다. 수신자는 아쉽게도 약 2000자 길이입니다.
$ age-keygen -pq -o key.txt
$ age-keygen -y key.txt > recipient.txt
$ age -R recipient.txt example.jpg > example.jpg.age
$ age -d -i key.txt example.jpg.age > example.jpg
양자 내성 키 지원은 age v1.3.0 이상에 내장되어 있습니다. 또는
age-plugin-pq 바이너리를 설치하여 $PATH에 배치하면 플러그인을 지원하는
모든 버전과 구현체의 age에 지원을 추가할 수 있습니다. 수신자는 즉시
작동하지만, ID는 age-plugin-pq -identity로 플러그인 ID로 변환해야 합니다.
-p/--passphrase를 사용하여 파일을 암호로 암호화할 수 있습니다. 기본적으로 age는 안전한 암호를 자동으로 생성합니다. 암호로 보호된 파일은 복호화 시 자동으로 감지됩니다.
$ age -p secrets.txt > secrets.txt.age
Enter passphrase (leave empty to autogenerate a secure one):
Using the autogenerated passphrase "release-response-step-brand-wrap-ankle-pair-unusual-sword-train".
$ age -d secrets.txt.age > secrets.txt
Enter passphrase:
-i로 전달된 ID 파일이 암호로 암호화된 age 파일인 경우 자동으로 복호화됩니다.
$ age-keygen | age -p > key.age
Public key: age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5
Enter passphrase (leave empty to autogenerate a secure one):
Using the autogenerated passphrase "hip-roast-boring-snake-mention-east-wasp-honey-input-actress".
$ age -r age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5 secrets.txt > secrets.txt.age
$ age -d -i key.age secrets.txt.age > secrets.txt
Enter passphrase for identity file "key.age":
암호로 보호된 ID 파일은 대부분의 사용 사례에서 필요하지 않습니다. 암호화된 ID 파일에 대한 접근이 전체 시스템에 대한 접근을 의미하기 때문입니다. 그러나 ID 파일을 원격으로 저장하는 경우 유용할 수 있습니다.
편의 기능으로 age는 ssh-rsa 및 ssh-ed25519 SSH 공개 키로 암호화하고 해당 개인 키 파일로 복호화하는 것도 지원합니다. (ssh-agent는 지원되지 않습니다.)
$ age -R ~/.ssh/id_ed25519.pub example.jpg > example.jpg.age
$ age -d -i ~/.ssh/id_ed25519 example.jpg.age > example.jpg
SSH 키 지원은 더 복잡한 암호화를 사용하며 암호화된 파일에 공개 키 태그를 포함하므로 특정 공개 키로 암호화된 파일을 추적할 수 있습니다.
SSH 키 지원과 -R을 결합하면 GitHub 프로필에 나열된 SSH 키로 파일을 쉽게 암호화할 수 있습니다.
$ curl https://github.com/benjojo.keys | age -R - example.jpg > example.jpg.age
사람들이 인증에만 사용할 때 SSH 키를 폐기할 수 있으므로 장기적으로 보호하지 않을 수 있으며, YubiKey에 보관된 SSH 키는 파일 복호화에 사용할 수 없다는 점을 유의하세요.
age-inspect 명령은 복호화하지 않고 암호화된 파일의 메타데이터를 표시할 수 있습니다. 여기에는 수신자 유형, 양자 내성 암호화 사용 여부, 페이로드 크기가 포함됩니다.
$ age-inspect secrets.age
secrets.age is an age file, version "age-encryption.org/v1".
This file is encrypted to the following recipient types:
- "mlkem768x25519"
This file uses post-quantum encryption.
Size breakdown (assuming it decrypts successfully):
Header 1627 bytes
Encryption overhead 32 bytes
Payload 42 bytes
-------------------
Total 1701 bytes
Tip: for machine-readable output, use --json.
| Homebrew (macOS 또는 Linux) |
brew install age
|
| MacPorts |
port install age
|
| Windows |
winget install --id FiloSottile.age
|
| Alpine Linux v3.15+ |
apk add age
|
| Arch Linux |
pacman -S age
|
| Debian 12+ (Bookworm) |
apt install age
|
| Debian 11 (Bullseye) |
apt install age/bullseye-backports
(백포트 활성화 age v1.0.0+ 필요)
|
| Fedora 33+ |
dnf install age
|
| Gentoo Linux |
emerge app-crypt/age
|
| Guix System |
guix package -i age
|
| NixOS / Nix |
nix-env -i age
|
| openSUSE Tumbleweed |
zypper install age
|
| Ubuntu 22.04+ |
apt install age
|
| Void Linux |
xbps-install age
|
| FreeBSD |
pkg install age (security/age)
|
| OpenBSD 6.7+ |
pkg_add age (security/age)
|
| Chocolatey (Windows) |
choco install age.portable
|
| Scoop (Windows) |
scoop bucket add extras && scoop install age
|