개요
.NET/C# 드라이버로 사용 중 암호화 라는 기능 세트를 사용하여 특정 문서 필드를 암호화할 수 있습니다. 사용 중 암호화를 사용하면 애플리케이션에서 데이터를 MongoDB로 보내기 전에 암호화하고 암호화된 필드가 있는 문서를 쿼리할 수 있습니다.
경고
MongoDB 8.2 알려진 문제
Windows 플랫폼에서는 기본값 생성 인수를 사용하여 mongocryptd 의 8.2.0 버전을 실행 수 없습니다. 이 문제를 방지하려면 mongocryptd 프로세스 수동으로 시작하고 --logpath 인수를 지정해야 합니다. 또는 mongocryptd 대신 자동 암호화 공유 라이브러리 를 사용합니다.
이 문제와 해결 방법에 대해 자세히 학습하려면 MongoDB 8.2 의 알려진 문제 를 참조하세요. 릴리스 노트.
중요
클라이언트 측 필드 레벨 암호화 또는 Queryable Encryption 사용하여 자동 암호화 하도록 구성된 클라이언트에서는 $rerank 단계가 지원되지 않습니다. $rerank이 포함된 파이프라인 Unrecognized pipeline stage name: '$rerank'와 같은 오류로 인해 실패합니다.
이 제한은 암호화됨 필드가 없는 컬렉션을 포함한 모든 컬렉션과 $unionWith과 같은 하위 파이프라인 내에서 $rerank을 사용하는 경우에 적용됩니다.
사용 중 암호화는 권한이 없는 사용자가 일반 텍스트 데이터가 MongoDB로 전송되거나 암호화된 데이터베이스에 있는 동안에는 볼 수 없도록 합니다. 애플리케이션에서 사용 중 암호화를 활성화하고 데이터 암호 해독 권한을 부여하려면 애플리케이션만 액세스할 수 있는 암호화 키를 만들어야 합니다. 암호화 키에 액세스할 수 있는 애플리케이션만 해독된 일반 텍스트 데이터에 액세스할 수 있습니다. 공격자가 데이터베이스에 액세스하는 경우 암호화 키에 대한 액세스 권한이 없기 때문에 암호화된 암호 텍스트 데이터만 볼 수 있습니다.
사용 중 암호화를 사용하여 다음과 같은 유형의 민감한 데이터가 포함된 MongoDB 문서의 필드를 암호화할 수 있습니다.
신용 카드 번호
주소
건강 정보
재무 정보
기타 민감한 정보 또는 개인 식별 정보(PII)
MongoDB는 사용 중 암호화를 활성화하기 위해 다음과 같은 기능을 제공합니다.
Queryable Encryption
Queryable Encryption(QE)는 동일성, 범위, 접두사, 접미사 및 부분 문자열 쿼리를 포함하여 고유하게 암호화된 필드 값 쿼리를 지원하는 사용 중 암호화 기능입니다. 범위 쿼리 지원에는 MongoDB Server 8.0 이상이 필요합니다. 접두사, 접미사 및 부분 문자열 쿼리 지원에는 MongoDB Server 9.0 이상이 필요합니다.
다음 표에는 접두사, 접미사 및 부분 문자열 쿼리용 .NET/C# 드라이버 메서드와 이에 상응하는 MongoDB Server 연산자가 나열되어 있습니다.
.NET/ C# 드라이버 메서드 | 설명 | MongoDB Server 연산자 |
|---|---|---|
| string 값의 첫 번째 문자가 지정된 string의 문자와 일치하면 | |
| string 값의 마지막 문자가 지정된 string의 문자와 일치하면 | |
| string 값의 문자 하위 집합이 지정된 string의 문자와 일치하면 | |
| 정규화된 string 값이 지정된 string의 정규화된 string 버전과 일치하면 |
Queryable Encryption에 대해 자세히 알아보려면 서버 매뉴얼에서 Queryable Encryption을 참조하세요.
클라이언트 사이드 필드 레벨 암호화
클라이언트 사이드 필드 레벨 암호화(CSFLE)는 암호화된 필드에 대한 동일성 검색을 지원합니다. MongoDB Server 버전 4.2에서 CSFLE가 도입되었습니다.
QE와 달리 CSFLE는 각 필드에 대해 암호화 알고리즘을 선택해야 하며, 해당 선택에 따라 필드 쿼리 가능 여부가 결정됩니다. 결정론적 암호화는 항상 동일한 입력 값에 대해 동일한 출력 값을 생성합니다. 암호화 후 일치하는 값이 동일하게 보이므로 이러한 필드에서 동등성 쿼리를 실행할 수 있습니다. 무작위 암호화는 동일한 입력 값을 암호화할 때마다 다른 출력 값을 생성합니다. 드라이버는 이러한 필드를 복호화할 수 있지만 쿼리할 수는 없습니다.
결정적 암호화는 쿼리 지원을 위해 기밀성을 일부 희생합니다. 암호화된 필드의 카디널리티가 낮으면 공격자가 각 암호화된 값이 나타나는 빈도를 비교하여 원래 값을 추론할 수 있습니다. 이 기법을 빈도 분석이라고 합니다. 쿼리하지 않는 필드를 보호하려면 무작위 암호화를 사용하세요.
CSFLE에 대해 자세히 알아보려면 서버 매뉴얼에서 CSFLE를 참조하세요.