해싱이 뭐임?

shockwave·2024년 9월 22일

TIL

목록 보기
29/49

우리가 서버에 접속하기 위해 나라는 사람을 증명해야하는 수단으로 사용하는 것이 인터넷에서는 ID와 PASSWORD다.
공항에서 출입국절차를 밟을 때 필요한 여권처럼 우리를 증명해줄 수 있는 카드가 ID와 PASSWORD인 것이다.
이 정보들은 누군가가 해킹해 사용할 수 있는 위험이 항상 도사리고 있다.
그렇기에 보안이라는 것이 필요한 것이다.

어떻게하면 우리가 우리인 것을 알려줄 수 있을까, 그들이 그들인 것을 알 수 있을까를 생각하다보면
인증(Authentication), 인가/권한부여(Authorization)에 관련되어 배우기 시작한다.
클라이언트가 서버로 데이터를 요청하고 서버가 응답하여 받는 자연스러운 Request와 Response사이에는 이것을 탈취당하지 않기 위해, 또는 손상/변조되지 않고 전달하기 위해 많은 정보를 추가해 담게 된다. (패킷에 추가하는 헤더와 트레일러를 통해)

갑자기 너무 깊게 들어가고 싶진 않으므로 잠시 방향을 돌리겠다.
이런 일련의 과정들을 생각해보면 클라이언트가 DB서버에 접속할 때 사용하는 ID와 PASSWORD는 원문 그대로 담기엔 너무나도 위험하다는 것을 깨닫게 된다. (평문은 위험하다) -> 실제 사례 기사도 있다. 링크
그러다가 나오는 개념이 '암호화'이다.

우선, 암호화를 사용하면 얻는 가장 직관적인 장점부터 알면 좋을 것 같다.
누군가가 우리의 정보가 저장되어있는 DB에서 데이터를 빼내갔을 때, 그것을 사용하려고 해도 이미 변환된 알 수 없는 데이터들을 (예를 들자면, 1234라는 값이 변환되어 저장된 629280e686cf0c3f5d5a86aff3ca12020c923adc6c9라는 데이터) 사용하기엔 너무나도 어렵기 때문에 저장된 정보의 보안성이 높다고 할 수 있다.


암호화 / 복호화

암호화(encryption)는 정보를 노출시키지 않기 위해 특정 알고리즘을 이용하여 암호화된 형태로 변형하는 것을 말한다.

복호화(decryption)는 암호화된 데이터를 다시 원래의 데이터로 읽을 수 있도록 하는 것을 말한다.


해싱

해싱은 단방향 암호화이다.
복호화하지 않고 변환된 값만을 뱉어낼 수 있다.
어떤 수학적 연산이나 알고리즘으로 원본 데이터를 완전히 다른 암호화된 데이터로 변환시킨다.

간단하게 설명가능한 해싱된 암호는 누구라도 알아내기엔 쉽지 않을 수 있다.
하지만 치명적인 단점이 있다.
특수한 알고리즘이나 연산에 의해 돌아가기 때문에 같은 값을 넣었을 때 같은 결과값을 뱉어낸다는 것이다.
즉, 특정 공격자가 브루트포스(무차별적인 대입 공격)를 통해 원문(본래 데이터)값을 얻어낼 수도 있는 위험이 있다.
이에 대해 해싱된 암호에 대한 공격들을 막기 위한 대안도 있긴 있다.

  • 여러번 해싱처리한다.
    자물쇠도 하나 차는거랑 여러개 차는 건 푸는데 걸리는 시간이 다르니까
  • 솔팅(Salting)한다.
    소금을 친다는 의미인데, 특정 문자열을 암호에 함께 넣어 돌리는 것이다.
    해싱되는 패턴에 더해 임의의 값까지 함께 더해지니 공격자 입장에서는 본래의 데이터를 찾기가 더욱 힘들어진다.

암호화된 패턴은 절대적인 안전성을 제공하지 않는다.
패턴을 해독하기까지 걸리는 시간을 늦추는 것밖에 할 수 없다는 것을 항상 인지해야한다.


도움이 된 사이트
https://st-lab.tistory.com/100
https://velog.io/@ha0kim/%EC%95%94%ED%98%B8%ED%99%94Encryption

profile
생각을 많이. 입은 무겁게. 심장은 항상 열심히 뛰는 사람이 되자.

0개의 댓글