[C]해시(hash)



1️⃣ 해시

(1) 해시 vs 암호화

  • 중요한 정보를 저장할 때는 누구나 볼 수 없게 암호화를 해야합니다. 예를 들면 로그인을 할 때비밀번호암호화시켜서 가리고 특별한 key를 이용해야지만 비밀번호를 볼 수 있게 하는 방법입니다.
  • 이때문에 암호화특별한 key만 가지고 있다면 역으로 비밀번호를 알 수 있기 때문에 양방향성의 성질을 가지고 있습니다. 그러나 이 때문에 특별한 key를 잃어버리면 그 데이터베이스의 모든 비밀번호가 해킹당하게 됩니다.
hash_func
  • 그 대신 해시를 이용하면 됩니다.
  • 데이터(비밀번호)를 해시 함수에 넣어 해시값을 만들어 줍니다.
  • 같은 데이터를 입력하면 항상 같은 해시 값이 나옵니다.
  • 반대로 해시 값으로 데이터(비밀번호)를 찾을 수 없습니다.
  • 이렇게 해시단방향성의 성질을 가지고 있습니다.
    • 해시값에 대해 좀 더 자세히 설명하자면 해시 함수에게 어떤 데이터대표하는 내놓으라 하고 받은 값이 해시 값입니다.
    • 해시 함수임의의 크기를 가진 데이터를 고정 크기의 값에 대응하게 하는 함수를 말합니다. hash_example

    (2) 해시의 취약점(rainbowtable, salt)

    • 하지만 rainbowtable라는 특정 해쉬함수에 대해 데이터와 그에 대응하는 해쉬값연결한 테이블이 생기게 되었고 이로인해 해쉬값을 이용하여 데이터를 해킹할 수 있게 됩니다.
    • 이런것을 막기위해 생긴 것이 salt인데 입력값으로 데이터를 넣어줄 때 그 데이터값에 특별한 salt값을 붙여서 해쉬함수에 넣어주는 원리입니다.
    • 이러한 salt를 이용한다면 단순한 비밀번호(데이터)일지라도 해쉬값으로 역추적하기는 쉽지 않게될 것입니다.
    • 참고하면 좋을 영상 >>>>>노마드 코더 - 해시함수 5분설명


    2️⃣ 해시 테이블

    (1) 해시 테이블 특징

    • 해시 테이블이란 해시함수를 사용하여 생성한 해시값을 색인(index)로 삼아 키(key)데이터(value)를 저장하는 자료구조를 말합니다.
    • 기본연산으로는 탐색(search), 삽입(insert), 삭제(delete)가 있습니다.
    • 주로 효율적인 검색에 활용되기 때문에 리소스보다 속도를 추구합니다.
    • 을 저장하는 방법은 여러가지가 있지만 해시 테이블의 평균 시간 복잡도검색, 삽입, 삭제에서 O(1)로 가장 빠른 편입니다.
    • 단순히 배열을 이용하여 값이 있으면 1, 없으면 0을 저장하는 방법은 숫자가 커질경우 메모리적으로 비효율적이고 보안에도 취약합니다. array_sample

    • 해쉬테이블의 종류는 여러가지이지만 가장 간단한 방법으로 색인 = 입력값 % 10과 같이 입력값색인(index)으로 만듬으로써 일정범위의 크기로 만들 수 있습니다.
    • 하지만 이러한 방법의 경우 중복의 경우가 있는데 다음과 같은 방법으로 줄일 수 있습니다.
      • 체이닝(Chaining): 색인(index)가 같은 것끼리 체인으로 연결시키는 방법 (연결리스트 이용)
    • 그러나 체이닝(Chaining)방식 또한 특정 색인(index)만 사용되어 이미 확복해둔 리소스의 손실이 일어나게되어 좀 더효율적인 방법을 찾게 됩니다.
      • 선형 탐색(Linear Probing): 중복될 경우 다음 빈칸에 데이터를 저장하는 방식
    • 선형 탐색(Linear Probing)방식은 이미 확보해둔 Bucket을 먼저 소모시켜 리소스적으로 효율을 높일 수 있습니다.
    • 참고하면 좋을 영상 >>>>>코딩하는거니 - 해시테이블
    • 그밖의 충돌방지방법에 대해 알고싶다면 >>>>>배하람블로그-해시 테이블

    (2) 연결 리스트를 사용한 해시 테이블(chaining)

    • 연결 리스트를 사용하여 해시 테이블을 만들면 색인이 중복되더라도 각 색인에 해당하는 값이 추가될 때마다 노드를 추가해주면 됩니다.
    • 자세한 내용은 다음 포스트에서 정리하도록 하겠습니다.
      >>>>>연결리스트로 해시테이블 만들기




    © 2021.02. by kirim

    Powered by kkrim