A라는 테이블에 ACOLUMN라는 한 컬럼에만 PK가 걸려있는데 이걸 암호화 후
조건절에서 복호화해서 써도 인덱스 정상적으로 타는지 궁금합니다.
Comment 3
-
항해자™
2014.09.24 18:38
-
인덱스가 걸릴 컬럼에 암호화를 하면 인덱스는 못탑니다.
Hash함수의 경우라면
WHERE Hash적용된컬럼 = Hash함수(Keyword)
이런 방식이 가능합니다.
Hash함수들이 매번 같은 값을 리턴하기 때문에 가능한 방법인데
대신 이걸로 암호화를 대신하긴 힘듭니다.
패스워드처럼 데이터의 도메인이 광범위한 경우라면 Hash로 가능하지만
주민등록번호 같은 경우는 미리 Hash함수를 적용해놓은 사전을 가지고 있다면 Join 한방으로 암호화는 풀려버리게 됩니다.
AES256등 암호화 함수들은 매번 다른 값을 리턴합니다.
다시 말하면
"A"라는 값을 암호화 해서 저장한 후
그 "A"를 찾기 위해서
WHERE 암호화된"A" = 암호화함수("A")
이런식으로 쿼리를 한다고 해도
매번 다른 값을 리턴하기 때문에 찾을 수가 없습니다.
방법은
WHERE 복호화함수("암호화된 컬럼") = "A" 이렇게 해야 하는데
그렇게 되면 전체 레코드를 복호화 해보기 전에는 어떤게 "A"인지 알수가 없습니다.
따라서 인덱스가 무용지물이 되죠.
만약 암호화 할때마다 같은 값을 리턴하는 암호화함수가 있다면
누군가의 의해서 유추가능해질지도 모르니..... 사용 안하시는게....
-
Juventus
2014.09.25 09:24
두분 다 답변 감사합니다.
이러면 안탑니다,,
where 컬럼 = 암호화('내용')
이러면 탑니다,,,