사용자의 패스워드는 사용자가 우리의 프로덕트를 사용하고 싶고, 그렇기 때문에 우리의 제품과 서비스를 믿고 자신의 개인정보를 패스워드 와 함께 우리에게 맡기는거라고 생각하기 때문에, 사용자의 패스워드를 최대한 안전하게 보관 해야한다고 생각합니다.
어떻게 안전하게 보관해야하는가?
- 암호화 어떠한 정보(사용자의 패스워드)를 암호화시켜 다른 이들이 직접 그 의미를 알 수 없게 하는 작업
- 복호화 암호화된 데이터를 해복하는 작업
그리고, 암호화만 되어 데이터가 저장 되는지, 그리고 암호화된 데이터를 복호화 하는지에 따라 방향성이다.
- 단방향성 (암호화) 복호화가 불가능하며, 이것을 해싱(Hashing)이라고 부른다.
- 양방향성 (암호화 + 복호화) 해싱과 다르게 암호화 된 정보,데이터를 역으로 복호화도 가능하다.
단방향 해시 함수
- 다이제스트: 임의의 길이의 정보(패스워드)를 수학적 연산이나 알고리즘을 통해서 원본 데이터를 매핑하여 완전히 다른 암호화된 데이터로 변환시켜준다. 그리고 단방향은 앞서 얘기한것 과같이 원본의 데이터를 구할 수 없다. 대표적인 해시 알고리즘에는 SHA, MD, HAS 등이 있다.
- 단방향 해시 함수의 단점
- 같은 데이터는 같은 다이제스트를 가진다.
- 해커들이 여러 값들을 대입해보면서 얻었던 다이제스트들을 모아놓은 리스트에서 메세지의 원문을 찾는다. 이러한 다이제스트들의 테이블을 레인보우 테이블 이라고 한다.
- 무차별 대입 공격(브루트포스)
- 해시 함수는 원래 빠른 데이터 검색을 위한 목적으로 설계되었기 때문에 원문과 다이제스트는 금방 얻을 수 있다. 해커들은 ‘상징성’있는 문자를 추려서 조합하여 해킹을 시도한다.
- 단방향 해시 함수의 단점 보완
- 해시 함수를 여러번 수행
- 다이제스트를 여러번 수행한다. 브루트포스 공격을 무력화 할수 있다.
SALT(솔트)
- 해시 함수로 암호화 전에 패스워드에 임의의 문자열인 salt를 추가하여 다이제스트를 생성하는 것으로, 같은 패스워드라도 각기 다른 salt가 들어가 다이제스트가 다르게 생성되어 rainbow table을 무의미하게 만든다. salt는 최소 128bit 정도는 되어야 안전하다.
양방향성 암호화
-
대칭형(비밀키 암호) : 암호화와 복호화에 동일한 비밀키 사용
-
비대칭형(공개키 암호) : 암호화, 복호화에 서로 다른 비밀키를 사용
-
대칭형 (비밀키 암호) 알고리즘
암호화, 복호화에 서로 동일한 키가 사용되는 암호화 방식으로 키를 비공개하는 것이 특징입니다. 속도가 빠르다는 장점이 존재하지만 키 배송 위험성이 존재하여 송신 측에서 수신측에 암호키를 전달하는 과정에서 키가 노출될 우려가 있다는 단점이 존재합니다. 대표적으로는 AES가 있습니다.
대칭키(비공개키)는 사용하는 키와 복호화 할때 사용하는 키가 동일한 암호화 기법으로, 대게 암호화 알고리즘이라 하면 위 알고리즘을 가리킵니다. 현재 가장 보편적으로 쓰이는 암호화 방식은 현 미국 표준 방식인 AES로 128~256비트 키를 적용할 수 있어 보안성이 뛰어나며 공개된 알고리즘이라 누구나 사용 가능합니다.
- 비 대칭형 (공개키 암호) 알고리즘 암호화, 복호화에 서로 다른 키가 사용되는 방식으로 하나의 키는 공개키로 사용하는 것이 특징입니다. 키 배송의 문제를 근본적으로 차단하여 안정성이 높지만 대칭키 방식에 비해 속도가 느리다는 단점이 존재한다. 비 대칭형 암호는 이름 그대로 암호화 키와 복호화 키가 다른 것 입니다. 암호화를 하면 하나의 키 쌍이 생기고 이 두개의 키는 수학적으로 밀접한 관계를 가지게 됩니다. 두개의 키를 각각 A키, B키 라고 했을 때 A키로 암호화 한 암호문은 B키로만 복호화 할 수 있고, B키로 암호화 한 암호문은 A키로만 복호화 할 수 있습니다. 따라서 이 중 하나의 키만 비밀로 하고(이를 비밀키, 개인키라고 합니다) 다른 하나의 키는 누구에게 공개해도(이를 공개키라고 합니다) 가능한 키가 됩니다. 예로 들어 인터넷 뱅킹을 생각해 봅시다.
-
사용자가 인터넷 은행 사이트에 접속하게 되면 사용자 컴퓨터에는 공개키와 비밀키가 생성 됩니다.
-
사용자 컴퓨터에서 공개키가 은행으로 전송되면 은행에서는 중요한 정보를 공개키로 암호화하며 암호문을 사용자에게 전달합니다.
-
사용자는 비밀키로 암호문을 해독하여 중요한 정보를 은행과 공유하며 통신을 하게 됩니다.
이러한 공개키 방식은 공인인증서, 전자서명 등에서 사용하고 있는 것이 특징입니다.