보안이란 권한이 없는 타인이 정보를 수집하지 못하도록 안전하게 보호하는 것이다.

 

이것의 첫 걸음이 Hash라 생각이 된다. 만약 데이터를 평문으로 저장한다고 생각해보자.

그러면 데이터가 속한 서버를 접속하게 된다면 쉽게 데이터를 탈취할 수 있다.

인가되지 않은 누군가가 접속하더라도 최대한 보안을 2중 3중으로 막기 감싸기 위해 암호화가 필수이다.

이를 위해 현재 Https 통신의 경우 암호화 송수신 알고리즘으로 다른 사람들이 쉽게 데이터를 복호화하지 못하게 하는 것이다.

 

Hash의 종류

 

단방향 해시(One-way Hash)

이 경우는 아래와 같이 암호화 알고리즘으로 복호화하지 못하게 하여 데이터를 안전하게 보호하는 것인데

이것의 문제점은 하나의 알고리즘으로 계속해서 암호화하기 때문에 123456이라는 데이터를 암호화한 값이 항상 똑같아서 반복된 분석으로 시간이 지나면 나중에는 유추가능하다는 단점이 존재한다.

이러한 데이터를 정리한 것을 레인보우 테이블(Rainbow table)이다. ex) sha-256 rainbow table

단방향 해시 값을 레인보우 테이블에 넣게되면 안에 들어있는 데이터와 비교해 암호화 전 데이터로 복호화해준다

보완 방향

1. Key Stretching

그러면 기존에 알려진 암호화된 데이터를 정리한 Rainbow table을 이용한 복호화 가능성을 막기 위해서는 두번 암호화하는 것도 방법이다.

이 경우는 해커가 어떠한 데이터인지 분석하는데 시간이 더 걸리고 심지어 못찾을 가능성도 있기 때문에 다양한 알고리즘으로 두번 암호화한다면 좀더 안정적 일것이다.

 

2. 솔트(Salt) 

솔트란 음식을 요리할때 사용하는 조미료다. 추가적으로 넣는다는 느낌으로 암호화 할때 추가적으로 데이터를 삽입하여 암호화 하는 것이다. 이 경우 데이터를 기존에 알려진 알고리즘을 이용하여 분석하기 어려워 진다. 즉 어떠한 데이터 인지 분석이 훨씬 더 어려워 지는 것이다.

 

아래와 같이 암호화 할때마다 Salt값을 넣어 암호화하게 된다면 분석하기 매우 어려워 데이터를 조금 더 안전하게 보호 가능할 것으로 보인다.

 

+ 다만.. 암호화 알고리즘이 클라이언트 단에 있기 때문에 해커가 쉽게 접근이 가능하다. 그렇기 알고리즘을 최대한 어떻게 감추는게 포인트고 알고리즘을 이해하기 어렵게 하는 것이 중요하다.

+ Recent posts