1

각 레코드를 암호화 할 때 고유 한 초기화 벡터를 사용하는 것이 좋지만 해당 필드를 검색하는 방법은 무엇입니까?고유 초기화 벡터를 사용하여 필드를 검색하는 방법은 무엇입니까?

현재 저는 단일 IV를 사용합니다. 즉, 전자 메일 주소에 대해 암호화 된 검색 문자열을 재구성하고 데이터베이스에서 해당 필드를 쿼리 할 수 ​​있음을 의미합니다. 고유 초기화 벡터를 사용하기 시작하면 암호화 된 검색 문자열을 재구성 할 수 없습니다.

내 환경은 ASP.NET, Entity Framework 및 SQL Server입니다. 아마도 이것은 데이터베이스에서 직접 더 쉽지만 쿼리는 LINQ-to-Entities를 통해 진행됩니다.

[내 첫 번째 질문 -! 드디어 내가 SO에 대한 답변을 찾을 수없는] 당신이 알고 있기 때문에

답변

1

을 고유 IV와 함께, 당신은 암호화 된 내용에 맞게하기 위해 모든 레코드를 해독해야 할 것 당신은 동일한 값을 암호화 할 때마다 다른 값을 얻습니다.

작은 테이블에서는 괜찮을 것이지만 괜찮은 수의 레코드에서는 괜찮은 것으로 가정하면, 다른 대안은 값을 해시하고 데이터베이스에 해시를 별도로 저장하는 것입니다. 기둥. 해시로 검색하면 일치하는 레코드 만 해독하여 진정한 일치임을 확인합니다.

암호화하는 것의 문제는 암호화 할 가치가있는 대부분의 항목 (신용 카드, 계좌 번호 등)에 가능한 입력 수가 고정되어 있다는 것입니다. 해시에 고유 한 소금이 붙어 있더라도 해싱은 신용 카드에 나쁜 영향을 미칩니다. 예를 들어 십억이나 조 또는 임의의 가능한 카드 번호가 있기 때문에 해시는 소금, 해시 및 적절한 프로세서가있는 경우 합리적으로 짧은 시간에 카드 번호를 리버스 엔지니어링하십시오.

많은 수의 입력으로 작업하고 있다면이 방법이 효과적 일 수 있습니다.

또 다른 대안으로는 합리적으로 고유 한 암호화 된 데이터 조각이 있는데 (예 : 신용 카드 번호의 경우 마지막 4) 비밀은 아니지만 평문에 해당 부분을 저장할 수 있으며 큰 데이터 집합을 매우 작은 결과 집합으로 필터링 한 다음 해당 결과 집합의 각 레코드를 해독하여 검색 조건과 비교합니다.

+0

좋은 측면 사고. 따라서 해싱 솔루션은 전자 메일 주소에 적합합니다. 그러나 그 칼럼에 대한 공통된 IV가 같은 이유로 안전하지 않을까요? – GuyB

+0

나는 그 주제에 대한 전문가가 아니며, 내가 지난 몇 년간 읽은 것에서 배웠다. 하지만 내 이해가 정적 IV에 대한 주된 이유는 공격자가 동일한 암호화 된 메시지를 두 번 보는 경우, 그들은 동일한 평문 (물론 해시도 마찬가지 임)을 알 수 있습니다. 그러나 정적 IV가 공격자에게 다른 메시지를 해독하는 수단을 제공한다는 내용은 보지 못했습니다. 그렇다면 정적 IV가 동적 IV + 해시와 다르지 않다는 것이 맞다고 말할 수 있습니다. –

관련 문제