
Paranoid의 라이브러리에는 암호화 아티팩트에 대한 알려진 취약점 검사 구현이 포함되어 있습니다.
Paranoid 프로젝트는 공개 키, 디지털 서명, 일반적인 의사 난수와 같은 암호화 산출물에서 잘 알려진 취약점을 검사합니다. 이 라이브러리는 문헌에서 발견된 기존 연구 결과들의 구현과 최적화를 포함합니다. 기존 연구에서는 이러한 산출물의 생성이 일부 경우에 결함이 있음을 보여주었습니다. 다음은 이 라이브러리가 기반으로 하는 몇 가지 발표 자료의 예입니다.
목표는 Google 내부와 외부에서 암호화 사용 사례에 대한 신뢰도를 높이는 것입니다.
비대칭 암호화를 다룰 때 암호화 산출물은 일반적으로 다음과 같습니다:
Paranoid를 사용하면 모든 암호화 산출물을 테스트할 수 있지만, 주된 동기는 취약한 타사 하드웨어 또는 소프트웨어 블랙박스의 사용을 탐지하는 것입니다. 따라서 Paranoid는 소스 코드를 검사할 수 없는 경우(위에 나열된 상황 3)에도 사용할 수 있습니다.
이 프로젝트는 알려진 취약점과 알려지지 않은 취약점을 모두 탐지하는 것을 목표로 합니다. 예를 들어, 프로그래밍 오류나 취약한 독점 난수 생성기 사용으로 인한 취약점을 식별하려고 합니다. 새로운 취약점을 탐지하는 것은 물론 알려진 취약점을 탐지하는 것보다 훨씬 어렵습니다. 이러한 탐지는 대규모 산출물 집합이 필요하거나 낮은 확률로만 취약한 산출물을 찾을 수 있습니다.
따라서 우리는 피드백을 받고 취약한 암호화 산출물을 생성한 암호화 라이브러리에 대해 알게 되는 데 매우 관심이 있습니다 (기여 요청 참조). 이 프로젝트는 지속적으로 진행 중입니다. 취약한 구현에 대해 알게 된 후에는 이를 대상으로 하는 탐지를 분석하고 추가할 계획입니다.
현재 구현된 검사에 대한 문서는 docs에 있습니다. 문서는 시간이 지남에 따라 더 많은 내용으로 채워질 것입니다.
검사 사용 방법을 알아보려면 examples 폴더나 단위 테스트(*test.py 파일)를 살펴볼 수 있습니다. 예제는 다양한 암호화 산출물 테스트를 보여줍니다.
저장소를 클론합니다:
$ git clone https://github.com/google/paranoid_crypto.git && cd paranoid_crypto
참고: 아래 명령은 Debian 안정 버전(bookworm)에서 테스트되었습니다. python3.11 이상을 사용하고 있는지 확인하십시오.
의존성을 설치합니다:
$ sudo apt update && sudo apt install python3 python3-full python3-pip python3-pybind11 python3-fpylll python3-gmpy2 protobuf-compiler
가상 환경을 만들고 활성화합니다:
$ python3 -m venv --system-site-packages ~/paranoid-venv
$ source ~/paranoid-venv/bin/activate
참고: 상황을 잘 알고 있다면 다음 단계로 건너뛰고 pip에 --break-system-packages 스위치를 사용해도 됩니다.
paranoid_crypto 파이썬 패키지를 설치합니다:
$ python3 -m pip install .
설치가 성공했는지 확인하려면 단위 테스트를 실행할 수 있습니다. 예를 들어:
$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 314.660s
OK
또는 컨테이너에서 실행하려면 아래와 같이 제공된 Dockerfile을 사용할 수 있습니다.
참고: docker가 설치되어 있는지 확인하십시오.
저장소를 클론한 후 docker 이미지를 빌드합니다:
$ docker build -t paranoid-img .
컨테이너를 생성하고 시작합니다:
$ docker run --name paranoid-container -it paranoid-img
paranoid-user@6191368b26b8:~$
설치가 성공했는지 확인하려면 단위 테스트를 실행할 수 있습니다. 예를 들어:
paranoid-user@6191368b26b8:~$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 307.555s
OK
다른 발표된 연구들과 마찬가지로 우리는 Certificate Transparency (CT)의 암호화 산출물을 분석해 왔습니다. CT는 2013년부터 발급된 웹사이트 인증서를 투명하고 검증 가능하게 만들기 위해 기록하며, 2022년 9월 기준 데이터베이스에는 70억 개 이상의 인증서가 있습니다. EC 공개 키 및 ECDSA 서명에 대한 Paranoid 검사에서는 지금까지 CT에서 취약한 산출물을 발견하지 못했습니다. 심각도가 높음(high) 또는 치명적(critical)인 RSA 공개 키 검사에 대해서는 다음과 같은 결과가 있습니다:
이러한 인증서 중 일부는 이미 만료되었거나 폐기되었습니다. 아직 활성 상태인 인증서(대부분 CheckGCD 인증서)의 경우 즉시 인증 기관에 보고하여 폐기하도록 했습니다.
이 라이브러리는 Google 보안 팀 구성원이 개발하고 유지 관리하지만 공식적으로 지원되는 Google 제품은 아닙니다. 기여하려면 CONTRIBUTING을 읽고 풀 리퀘스트를 보내주십시오. 버그를 신고하거나 기능 요청을 제출할 수도 있습니다.
연구에서 Paranoid를 사용하는 경우 다음 BibTeX로 인용할 수 있습니다:
@software{Barbosa_Bleichenbacher_Paranoid_Crypto_2022,
author = {Barbosa, Pedro and Bleichenbacher, Daniel},
license = {Apache-2.0},
month = {8},
title = {{Paranoid Crypto}},
url = {https://github.com/google/paranoid_crypto},
year = {2022}
}
| TestName | Potentially Related CVEs | Severity | Number of Weak Artifacts |
|---|
| CheckOpensslDenylist | CVE-2008-0166 | SEVERITY_CRITICAL | 3989 |
| CheckROCA | CVE-2017-15361 | SEVERITY_HIGH | 2875 |
| CheckGCD | - | SEVERITY_CRITICAL | 1860 |
| CheckFermat | CVE-2022-26320 | SEVERITY_CRITICAL | 36 |
| CheckContinuedFractions | - | SEVERITY_CRITICAL | 16 |
| CheckBitPatterns | - | SEVERITY_CRITICAL | 6 |
| CheckPermutedBitPatterns | - | SEVERITY_CRITICAL | 6 |
| CheckKeypairDenylist | CVE-2021-41117 | SEVERITY_CRITICAL | 4 |
| CheckPollardpm1 | - | SEVERITY_CRITICAL | 1 |