AES 암호화 / 복호화

텍스트와 passphrase를 붙여 넣으면 선택한 PHP OpenSSL cipher로 AES 암호화 또는 복호화를 빠르게 실행합니다. AES는 NIST가 FIPS 197에서 표준화한 대칭 블록 암호이며 TLS, WPA2, VPN, 디스크 암호화 등 많은 시스템에서 쓰입니다. 다만 이 페이지는 낮은 위험의 텍스트를 위한 편의 도구이지, 감사를 거친 비밀 보관소가 아닙니다. 민감한 파일이나 오래 보관할 비밀에는 age, GnuPG, 7-Zip 같은 오프라인 도구를 사용하세요.

AES로 텍스트를 암호화하는 방법

  1. 1

    OpenSSL cipher 선택

    현재 옵션에는 CBC, CTR, GCM 변형이 포함됩니다. CBC와 CTR 출력은 인증되지 않으며, 이 도구는 GCM 인증 tag를 저장하거나 검증하지 않습니다.

  2. 2

    passphrase 입력

    passphrase는 AES 키를 만들기 위해 SHA-256으로 한 번 해시됩니다. PBKDF2, salt, Argon2, work factor가 없으므로 길고 무작위인 passphrase를 사용하세요.

  3. 3

    낮은 위험의 텍스트 붙여넣기

    이 도구는 서버 측 Livewire/PHP OpenSSL 유틸리티입니다. 이 사이트로 보내고 싶지 않은 비밀번호, 운영 키, 개인 문서, 비밀은 붙여 넣지 마세요.

  4. 4

    Base64 결과 복사

    암호화할 때 무작위 IV를 만들고, 원시 암호문 앞에 붙인 뒤 결합된 바이트를 Base64로 인코딩합니다. 복호화에는 같은 cipher와 passphrase가 필요합니다.

이 도구가 실제로 출력하는 것

이 구현은 PHP OpenSSL을 사용합니다. 암호화 시 passphrase를 SHA-256으로 해시하고, 선택한 cipher가 요구하는 길이의 무작위 IV를 만든 뒤, 텍스트를 암호화하고 다음을 반환합니다.

Base64(IV || 암호문)

출력에는 salt, PBKDF2 파라미터, HMAC, GCM 인증 tag가 포함되지 않습니다. Web Crypto, age, GnuPG, OpenSSL 명령줄 레시피, 7-Zip이 만드는 형식과 호환되지 않습니다.

AES 옵션의 맥락

AES는 고정 128비트(16바이트) 블록 크기와 128, 192, 256비트 표준 키 크기를 가집니다. 여기서 중요한 보안 차이는 키 크기만이 아니라, 암호화된 메시지가 인증되는지 여부입니다.

Cipher 옵션 이 도구에서 알아둘 점
AES-128-CBC / AES-192-CBC / AES-256-CBC 무작위 IV와 PKCS#7 padding을 쓰는 일반적인 블록 모드입니다. 변조 탐지를 위해 HMAC-SHA-256 같은 별도 MAC이 필요합니다.
AES-256-CTR AES를 스트림처럼 쓰는 모드입니다. 별도 인증이 필요하며, 같은 키로 같은 IV/counter를 절대 재사용하면 안 됩니다.
AES-128-GCM / AES-256-GCM GCM은 보통 AEAD 모드이지만 인증 tag를 저장하고 검증할 때만 그렇습니다. 이 도구의 출력에는 그 tag가 없으므로 인증 암호화로 신뢰하지 마세요.

보안 주의사항

OWASP의 암호화 저장 가이드는 가능하면 인증 암호화를 쓰거나, 암호화와 별도 MAC을 함께 쓰라고 권장합니다. 이 도구를 사용할 때는 다음을 기억하세요.

  • 대칭 암호화입니다 - 같은 passphrase로 복호화합니다. passphrase는 암호문과 다른 채널로 공유하세요.
  • 약한 passphrase는 여기서 약한 키가 됩니다 - SHA-256은 빠르고 salt가 없어서, 공격자가 출력을 얻으면 추측을 빠르게 시험할 수 있습니다.
  • CBC와 CTR에는 인증이 필요합니다 - HMAC이나 다른 MAC이 없으면 공격자가 암호문을 바꿔도 감지하지 못할 수 있습니다.
  • 같은 키로 IV나 nonce를 재사용하지 마세요 - 도구는 암호화할 때 새 무작위 IV를 만들지만, 붙여 넣은 외부 데이터도 같은 규칙을 지켜야 합니다.
  • 진짜 비밀에는 감사된 도구를 사용하세요 - age, GnuPG, 7-Zip은 파일 형식, metadata, 인증을 더 신중하게 처리합니다.

자주 묻는 질문

현재 컴포넌트는 passphrase를 SHA-256으로 해시하고 나온 바이트를 OpenSSL의 키 재료로 사용합니다. PBKDF2, salt, scrypt, Argon2를 쓰지 않으므로 짧거나 재사용한 passphrase는 위험합니다.

아니요. CBC와 CTR에는 HMAC-SHA-256 같은 별도 MAC이 필요합니다. GCM은 보통 AEAD 인증을 제공하지만, 이 도구는 Base64 출력 안에 GCM tag를 저장하거나 검증하지 않습니다.

Livewire 액션이 PHP OpenSSL을 실행할 때 사이트 서버에서 처리됩니다. 브라우저 안에서만 실행되는 Web Crypto 도구가 아니므로 가치가 큰 비밀, 개인 키, 민감한 문서는 붙여 넣지 마세요.

Base64 결과에는 무작위 IV와 그 뒤의 원시 암호문이 들어갑니다. CBC padding이 바이트를 추가할 수 있고, Base64는 바이너리 데이터를 약 3분의 1 더 크게 만듭니다. 저장 형식에는 salt나 인증 tag가 없습니다.

이 도구는 텍스트만 처리하며 낮은 위험의 짧은 내용에 한정하는 편이 좋습니다. 파일이나 중요한 비밀에는 age, GnuPG, 7-Zip 같은 감사된 오프라인 암호화 도구를 사용하세요.

관련 도구