크립토 API (리눅스)
1. 개요
크립토 API (리눅스)는 리눅스 시스템에서 암호화 및 해시 함수를 제공하는 사용자 공간 인터페이스를 의미한다. 명령어 집합 구조를 통해 접근하거나, 커널 드라이버를 통해 접근하는 방식으로 나뉜다. 사용자 공간 인터페이스로는 AF_ALG와 cryptodev가 있다. AF_ALG는 네트워크 소켓과 유사한 방식으로 커널 내부 암호화 엔진에 접근하며, 리눅스 커널 2.6.38에 통합되었다. cryptodev는 OpenBSD의 /dev/crypto 인터페이스를 리눅스로 이식한 코드이나, 리눅스 커널에는 통합되지 않았다.
| 유형 | 커널 API |
|---|---|
| 운영체제 | 리눅스 (커널) |
| 라이선스 | GNU GPL 버전 2 |
| 상태 | 활성 |
| 사용 언어 | C |
| 기능 | 대칭 암호 비대칭 암호 해시 MAC 난수 생성기 |
|---|---|
| 위치 | `include/crypto/` 및 `crypto/` 디렉토리 |
| 종속성 | OpenSSL (선택 사항) |
| 인터페이스 | CMS GSSAPI IPsec TLS/SSL |
| 관련 기술 | dm-crypt loop-AES TrueCrypt |
| 외부 링크 | 리눅스 커널 공식 웹사이트 OpenSSL 공식 웹사이트 |
|---|
-
리눅스 커널 특징 -
커널 기반 가상 머신
커널 기반 가상 머신(KVM)은 리눅스 커널의 가상화 확장 기능으로, CPU와 메모리 가상화를 지원하며 QEMU와 함께 완전한 가상화 솔루션을 구성하고 다양한 관리 도구를 제공한다. -
리눅스 커널 특징 -
AppArmor
AppArmor는 리눅스 보안 모듈로, 프로그램의 정상적인 동작을 정의하는 프로필을 통해 비정상적인 행위를 차단하며 SELinux의 대안으로 제시되었으나 보안 취약점, 성능, 설정, 호환성 등에 대한 논란도 있다. -
리눅스 보안 소프트웨어 -
GNU 프라이버시 가드
GNU 프라이버시 가드는 붸르너 코흐가 개발한 공개 키 암호 방식 기반의 암호화 소프트웨어로, PGP와 호환되며 OpenPGP 표준을 준수하고 다양한 운영체제에서 사용 가능하다. -
리눅스 보안 소프트웨어 -
AppArmor
AppArmor는 리눅스 보안 모듈로, 프로그램의 정상적인 동작을 정의하는 프로필을 통해 비정상적인 행위를 차단하며 SELinux의 대안으로 제시되었으나 보안 취약점, 성능, 설정, 호환성 등에 대한 논란도 있다. -
암호 소프트웨어 -
OpenSSL
OpenSSL은 1998년에 설립된 암호화 도구 프로젝트로, 다양한 암호화 알고리즘과 프로토콜을 지원하며, 아파치 라이선스를 채택했고, 보안 문제와 API 호환성 문제 등의 비판을 받았다. -
암호 소프트웨어 -
I2P
I2P는 2003년 Freenet에서 분기된 익명 P2P 분산 통신 계층으로, IP 주소 노출을 방지하며 다양한 소프트웨어와 익명성 응용 프로그램을 지원하고, 기부금으로 운영되며 6~8주마다 릴리스를 진행한다.
2. 사용자 공간 인터페이스
암호화 함수 및 해시 함수를 제공하는 플랫폼은 크게 두 가지 방식으로 나눌 수 있다. 하나는 명령어 집합 구조 자체에 암호화 및 해시 함수를 포함시켜 커널 공간이나 사용자 공간에 있는 모든 프로그램에서 사용할 수 있도록 한 방식이고, 다른 하나는 프로세서 내부 장치를 통해 접근하며 OpenSSL, GnuTLS 등 사용자 공간에서는 커널 드라이버를 통해 접근해야 하는 방식이다.
크립토 API에서 제공하는 사용자 공간 인터페이스는 다음과 같다.
* AF_ALG: 네트워크 소켓과 유사한 인터페이스로, 커널 내부 암호화 엔진에 접근하기 위한 `AF_ALG` 주소 형식을 지원한다.
* cryptodev: OpenBSD 암호화 프레임워크 인터페이스인 /dev/crypto를 리눅스로 이식한 것이다.
2.1. 명령어 집합 구조를 이용하는 방식
명령어 집합 구조 자체에 암호화 및 해시 함수를 포함시켜 커널 공간이나 사용자 공간에 있는 모든 프로그램에서 사용할 수 있도록 하는 방식이다. 대표적인 예시로 인텔과 AMD의 AES-NI가 있다.
많은 플랫폼은 AES 암호화의 하드웨어 가속을 제공하며, 다양한 칩셋의 명령어 집합 아키텍처(ISA) 확장을 통해 프로그램을 노출한다. (예: x86의 AES 명령어 집합) 이러한 종류의 구현을 통해 모든 프로그램(커널 모드 또는 유저 스페이스)이 이러한 기능을 직접 사용할 수 있다.
2.2. 커널 드라이버를 이용하는 방식
프로세서 내부 장치를 통해 접근하며, 사용자 공간에서는 커널 드라이버를 통해 접근해야 하는 방식이다. OpenSSL, GnuTLS 등이 커널 드라이버를 통해 암호화 가속 기능을 활용한다. 대표적인 예시로 마벨 Kirkwood 및 AMD 지오드 프로세서가 있다.