0Pricing
Cryptology Academy · 강의

libsodium: 오용 방지 암호 라이브러리

안전하지 않은 매개변수를 선택하기 어렵게 만드는 libsodium의 의견이 반영된 API를 살펴봅니다.

libsodium: 오용 방지 암호 라이브러리은(는) CoddyKit의 무료 Cryptology Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cryptology Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

libsodium의 철학과 기원

libsodium은 Daniel Bernstein, Tanja Lange, Peter Schwabe가 개발한 NaCl(네트워킹 및 암호화 라이브러리)을 이식 가능하고 여러 플랫폼에서 빌드할 수 있도록 만든 라이브러리로, Frank Denis가 제작했습니다. 핵심 철학은 올바른 암호 사용은 최대한 쉽게 만들고 잘못된 사용은 최대한 어렵게 만드는 것입니다. 안전한 기본 설정, 간단한 응용 프로그래밍 인터페이스, 엄선된 알고리즘 선택을 통해 저수준 라이브러리에서 흔히 발생하는 실수를 방지합니다.

비밀 키 기반 인증 암호화

crypto_secretbox는 XSalsa20-Poly1305를 사용하여 비밀 키 기반 인증 암호화를 제공합니다. API는 메시지, 24바이트 논스(무작위로 생성됨), 32바이트 키를 받습니다. 출력은 암호화와 인증이 모두 적용된 암호문입니다. crypto_secretbox_open은 인증 태그를 원자적으로 복호화하고 검증하며, 변조가 감지되면 오류를 반환합니다. 이를 통해 손상되었거나 악의적으로 수정된 암호문의 복호화를 방지합니다.

공개 키 기반 인증 암호화

crypto_box은 X25519-XSalsa20-Poly1305를 사용하여 두 당사자 사이에 공개 키 기반 인증 암호화를 제공합니다. 발신자의 개인 키와 수신자의 공개 키가 주어지면, 메시지를 암호화하고 인증하여 의도한 수신자만 복호화할 수 있게 하며 수신자가 발신자의 신원을 확인할 수 있게 합니다. crypto_box_seal은 익명 변형입니다. 발신자는 숨겨지고 발신자 인증 없이 암호화만 제공됩니다.

Ed25519를 사용한 디지털 서명

crypto_sign은 Ed25519를 사용하여 디지털 서명을 구현합니다. 키 생성은 64바이트 개인 키(실제로는 시드와 공개 키를 연결한 값)와 32바이트 공개 키를 생성합니다. 서명 생성 결과는 64바이트 서명입니다. 검증은 빠르며 일정한 시간에 수행됩니다. Ed25519 서명은 결정적이므로(같은 메시지와 키는 항상 같은 서명을 생성함) 일부 구현에서 ECDSA에 영향을 주었던 무작위성 실패 취약점이 제거됩니다.

BLAKE2b를 사용한 해싱

crypto_generichash는 BLAKE2b를 사용하여 범용 해싱을 제공합니다. SHA-256과 달리 BLAKE2b는 키 기반 해싱을 위해 별도의 HMAC 구성을 필요로 하지 않으며, 선택적 키를 직접 받을 수 있습니다. 출력 길이는 16바이트에서 64바이트까지 구성할 수 있습니다. BLAKE2b는 동등하거나 더 나은 보안 특성을 제공하면서 최신 64비트 프로세서에서 SHA-256 및 SHA-512보다 빠릅니다.

BLAKE2b를 사용한 키 도출

crypto_kdf는 BLAKE2b를 사용하여 마스터 키에서 키를 도출합니다. 32바이트 마스터 키, 목적을 식별하는 컨텍스트 문자열(8바이트), 서브키 ID(64비트 숫자)가 주어지면 구성 가능한 길이의 암호학적으로 독립적인 서브키를 도출합니다. 이를 통해 하나의 마스터 키에서 서로 다른 목적을 위한 여러 독립 키를 도출할 수 있으며, 도출된 키 사이에 상관관계가 생기지 않습니다.

Argon2id를 사용한 비밀번호 해싱

crypto_pwhash는 비밀번호 해싱 대회에서 우승한 Argon2id를 사용하여 비밀번호 해싱을 제공합니다. Argon2id는 메모리 요구량이 큰 계산(GPU 공격에 강함)과 시간이 많이 걸리는 계산(ASIC 공격에 강함)을 결합합니다. 매개변수에는 연산 한도(시간 비용)와 메모리 한도가 포함되며, 보안 요구 사항에 맞게 조정할 수 있습니다. crypto_pwhash_str은 알고리즘과 매개변수가 포함된 저장에 적합한 표준 문자열을 생성합니다.

익명 암호화를 위한 봉인 상자

crypto_box_seal은 발신자를 공개하지 않고 수신자에게 메시지를 암호화합니다. 임시 키 쌍을 생성하고, 수신자의 공개 키와 키 교환을 수행한 다음, 임시 개인 키를 폐기합니다. 수신자는 자신의 개인 키를 사용하여 복호화할 수 있지만 발신자를 식별할 수는 없습니다. 이는 익명 제출 시스템과 단방향 암호화 채널에 적합합니다.

libsodium 언어 연동

libsodium은 사실상 모든 주요 프로그래밍 언어에 대한 언어 연동을 제공합니다. PyNaCl은 Python다운 예외와 바이트 객체를 사용하는 관용적인 Python 연동을 제공합니다. libsodium-wrappers는 JavaScript/Node.js 연동을 제공하며, 브라우저에서는 WASM을 사용합니다. libsodium.js는 순수 JavaScript 이식판입니다. 연동 품질은 다양하므로 알고리즘을 다시 구현하기보다 C 라이브러리를 감싸는 공식 연동 또는 널리 유지 관리되는 연동을 우선하십시오.

OpenSSL 저수준 API와의 비교

OpenSSL의 저수준 API는 알고리즘, 키 크기, 모드, 패딩, IV 관리에 대해 명시적으로 결정해야 합니다. 잘못된 조합도 조용히 허용됩니다. libsodium은 구성이 필요 없고 사용 사례마다 올바른 구현 하나를 제공합니다. 예를 들어 OpenSSL로 암호화하려면 암호 알고리즘, 모드, 키 도출, IV 생성, 패딩을 선택해야 하지만, libsodium의 crypto_secretbox에서는 키, 논스, 메시지만 제공하면 나머지는 올바르게 처리됩니다.

새 프로젝트에서 libsodium 선택하기

libsodium은 지원되는 언어에서 암호화 작업이 필요한 모든 프로젝트에 권장되는 출발점입니다. 작은 API 구성은 오용 가능성을 줄이고, 알고리즘은 현대적이며 충분히 분석되었고, 크로스 플랫폼 C 구현은 철저히 테스트되었습니다. OpenSSL과 같은 저수준 라이브러리로 전환해야 하는 경우는 대개 libsodium에서 사용할 수 없는 특정 알고리즘이 필요하거나 FIPS 140-2 검증이 필요한 때뿐입니다.

libsodium 작업

데이터베이스에 저장할 비밀번호를 해시하려면 어떤 libsodium 함수를 사용해야 합니까?

libsodium 요약

libsodium 요약: 안전한 기본값과 오용하기 어려운 API를 제공하며, Bernstein 등이 만든 NaCl 프리미티브를 기반으로 합니다. crypto_secretbox은 비밀 키 암호화(XSalsa20-Poly1305), crypto_box은 공개 키 암호화(X25519), crypto_sign은 Ed25519 서명, crypto_generichash는 BLAKE2b 해싱, crypto_pwhash는 Argon2id 비밀번호 해싱을 제공하고, 익명 암호화를 위한 봉인 상자와 대부분의 주요 플랫폼을 위한 언어 연동을 제공합니다.

자주 묻는 질문

“libsodium: 오용 방지 암호 라이브러리” 강의는 무료인가요?

네 — “libsodium: 오용 방지 암호 라이브러리” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cryptology Academy 강의 전체를 잠금 해제할 수 있습니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“libsodium: 오용 방지 암호 라이브러리”에서 뭘 배우나요?

안전하지 않은 매개변수를 선택하기 어렵게 만드는 libsodium의 의견이 반영된 API를 살펴봅니다. 브라우저에서 직접 실행하는 실습 코드로 Cryptology Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cryptology Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cryptology Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“libsodium: 오용 방지 암호 라이브러리” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cryptology Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cryptology Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. libsodium: 오용 방지 암호 라이브러리
  2. OpenSSL API: 핵심 구조와 함정
  3. Google Tink: 안전한 고수준 암호
  4. 암호 의존성 감사와 선택
← Cryptology Academy(으)로 돌아가기