컬럼 암호화 다들 어떻게 적용하고 계신가요?

이번에 EF Core의 ValueConverter를 이용해서
필요한 컬럼에 암호화를 걸고 있습니다.

이메일 정보도 암호화를 걸어야하는데
이렇게 하니까 이메일 중복검사에서 쿼리에 잡히질 않더라구요.

잠깐의 삽질 결과 암호화 시에 매번 다른 IV를 사용해서 동일한 평문을 던져도 암호문이 다른게 원인이였습니다.

보안 상의 문제 때문에 암호화 시에 매번 동일한 IV를 적용하면 안되는걸로 알고 있는데요.

이 경우 암호화된 데이터에 대한 원문 대조를 어떻게 수행하면 좋을까요?

ORM의 특성 상 우선 데이터를 클라이언트로 끌어와야 ValueConverter를 거쳐 복호문을 획득할 수 있습니다. 근데 이러면 이메일 하나 확인하자고 테이블 전체를 쿼리해야하니까 사실상 의미가 없는 해결책이구요…

CipherDB 라는 유료 라이브러리가 이런 열 암호화를 하는 것 같던데 진짜 어케 했누…

평문에서 항상 지정된 영역을 IV로 쓰면 되겠져. 근데, IV를 맞춰줄 꺼면, 구지 암호하 해야 되나여?

그래서 저도 고민입니다.
IV를 랜덤으로 쓰자니
쿼리가 안되고

해결책이 없는걸까요…?

저는 직접 해 보지 않았읍니다만, DB에 맡겨보는건 어떨런지요? (애플리케이션에서 처리 중이라고 이해 했읍니다 원글애서 미루어 짐작으로요.) .NET을 하시니, MSSQL 사용하실꺼라 가정하고, DB자체에서 지원을 하는거 같은데요. 예제들을 보니 뭐… 쿼리가 이뻐보이 않습니다만… 어디서 하던 부하는 걸리는거니까…

완전한 해결책은 아니더라도, 적어도 남에게 (DBA team) 떠넘기고 튈순 있지 않을까 … :slight_smile:

아니면, IV랜덤 하고, 컬럼하나를 더 만들어서 해시값을 저장 해두는 원초적이고 무식한 방법도 있을것 같구요.

제 머리에선 이게 한계네요 ㅋ

이래저래, 귀찮고 이상한 방법들 뿐이니, 적당히 괞찮은 놈으로 고르셔야 되지 싶네요. 행운을 빕니당.

저도 마침 딱 그 생각까지는 도달했습니다.
걍 암호문에 HMAC 박아서 대조시키는 방법이
그나마 코드 안에서 해결 볼 수 있는 선택지일 듯 합니다.

저희 DBA가… 그런게 잘 안되나봅니다…
애초에 DBA 믿고 가는거면 ef core도 안썼을 듯 싶네요 허허

SqlServer Always Encryption도 고려는 해봤는데 키 관리에 자체제작한 로직을 끼워넣기가 애매한 구조더군요. 애초에 Azure KMS를 경유하는 구조가 권장형이라서…

무튼 이래저래 타협점을 찾아봐야할 것 같습니다.