
RSA 공개 키 암호화를 위한 순수 Rust 라이브러리: 키 생성, PKCS#1 v1.5 및 OAEP 암호화/복호화, PSS 서명, 키 가져오기/내보내기.
순수 Rust로 구현된 이식 가능한 RSA 구현으로, PKCS#1 v2.2 (RFC8017)에 명시된 암호화 및 서명 방식을 제공합니다.
| 방식 | 용도 | 사양 |
|---|---|---|
| RSAES-OAEP | 암호화 | RFC8017 §7.1 |
| RSAES-PKCS1-v1_5 | 암호화 | RFC8017 §7.2 |
| RSASSA-PSS | 서명 | RFC8017 §8.1 |
| RSASSA-PKCS1-v1_5 | 서명 | RFC8017 §8.2 |
PKCS#1 v1.5 암호화는 레거시 애플리케이션과의 호환성을 위해서만 제공됩니다. 새로운 암호화 애플리케이션에는 OAEP와 PSS를 사용하는 것이 좋습니다.
알려진 구현 취약점에 대해서는 아래의 보안 경고를 참조하십시오.
use rsa::{Oaep, RsaPrivateKey, RsaPublicKey};
use sha2::Sha256;
let mut rng = rand::rng();
let bits = 2048;
let priv_key = RsaPrivateKey::new(&mut rng, bits).expect("failed to generate a key");
let pub_key = RsaPublicKey::from(&priv_key);
// Encrypt
let data = b"hello world";
let enc_data = pub_key.encrypt(&mut rng, Oaep::<Sha256>::new(), &data[..]).expect("failed to encrypt");
assert_ne!(&data[..], &enc_data[..]);
// Decrypt
let dec_data = priv_key.decrypt_blinded(&mut rng, Oaep::<Sha256>::new(), &enc_data).expect("failed to decrypt");
assert_eq!(&data[..], &dec_data[..]);
참고:
RsaPrivateKey::new를 사용할 때 키 생성 시간이 비정상적으로 느린 경우 릴리스 모드로 컴파일하거나Cargo.toml에 다음을 추가해 보세요. 더 높은 최적화 수준으로 빌드하면 키 생성이 훨씬 빨라지지만, 컴파일 시간이 약간 늘어납니다.[profile.debug] opt-level = 3
현재 1단계 (v) 🚧
1.0 🚢이 릴리스되기 전까지 세 단계가 있습니다.
이 크레이트는 Include Security의 보안 감사를 한 차례 받았으며, 이후 해결된 사소한 발견 사항이 하나뿐입니다.
그 밖의 알려진 문제는 이슈 트래커의 [공개 보안 이슈]를 참조하세요.
특히 [모듈러 거듭제곱 구현은 상수 시간이 아니지만],
타이밍 변동성은 흔히 사용되는 기법인 [랜덤 블라인딩]으로 가려집니다.
이 크레이트는 [Marvin 공격]에 취약하며, 이 공격을 통해 네트워크 공격자가
개인 키를 복구할 수 있습니다 (RUSTSEC-2023-0071 참조).
이 문제를 완화하기 위한 작업은 #390에서 확인할 수 있습니다.
이 크레이트는 Rust 1.85 이상을 지원합니다.
향후 MSRV는 변경될 수 있지만, 마이너 버전 범프와 함께 변경됩니다.
다음 중 하나의 라이선스로 제공됩니다.
원하는 대로 선택할 수 있습니다.
명시적으로 달리 밝히지 않는 한, Apache-2.0 라이선스에 정의된 대로 작업에 포함시키기 위해 의도적으로 제출한 모든 기여는 추가 약관이나 조건 없이 위와 같이 이중 라이선스로 제공됩니다.