ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 해시란
    프로그래밍 기초 공부 2022. 12. 4. 16:40

    해시

    • 단방향 암호화 기법
      • 암호화는 수행하지만 복호화는 불가능한 알고리즘
    • 해시함수를 이용하여 고정된 길이의 비트열로 변경
    • key와 실제 데이터의 값(value)이  한 쌍으로 존재
    • key값이 배열의 인덱스로 변환되기 때문에 검색과 저장의 평균적인 시간 복잡도가 O(1)
    • 해시를 만들기 위해선 해시함수가 필요

     

     

    해시함수

    • 해시함수는 해시를 만드는 함수
    • 임의의 길이의 데이터를 고정된 길이의 데이터를 출력하는 함수
    • 다른 말로 체크섬(checksum)
    • 매핑 전 원래 데이터의 값을 키, 매핑 후 데이터의 값을 해시값, 매핑하는 과정을 해싱

     

     

    해시함수의 특징

    • 입력값이 일부만 변경되어도 전혀 다른 해시값을 출력
    • 입력값 상관없이 고정된 길이의 해시값을 출
    • 복호화 불가능
    • 복잡하지 않은 알고리즘으로 구현되기 때문에 상대적으로 CPU, 메모리 같은 시스템 자원을 덜 소모
    • 같은 입력값에 대해서는 같은 출력값을 보장

     

     

    해시함수 사용 이유

    해시함수의 가장 큰 특징은 입력값이 일부만 변경되어도 전혀 다른 값을 출력한다는 것
    이러한 특징으로 인하여 해시함수를 사용하는 목적은 메시지의 오류나 변조를 탐지할 수 있는 무결성
    ex) 블록체인, 그 외에 비밀번호, 전자서명, 전자투표, 전자상거래 등에 사용

     

     

    해시 함수의 문제점

    인식 가능성(recognizability)

    • 입력값이 같으면 출력값이 같다는 성질 때문에 비밀번호가 같은 유저라면 모두 해킹 가능성이 있음
    • 또한 해커들은 미리 레인보우 테이블을 만들어 두기 때문에 비밀번호를 해킹하면 이를 레인보우 테이블에서 비교 대조하여 원래의 비밀번호를 알아낼 수 있음
      • 레인보우 테이블 : 입력값과 해시값을 연결해놓은 테이블

     

    속도

    • 해시 함수의 처리 속도가 빠르기 때문에 무차별 대입 공격을 당할 수 있다.
    • 고성능의 GPU 등을 이용해서 무차별적으로 해시 함수를 대입해보면 1초에 약 50억번 이상 대입이 가능하기 때문에 대입하다보면 뚫을 수도 있다는 것

     

     

    문제점 해결방안

    솔트(Salt)

    • 일종의 랜덤 텍스트
    • 사용하는 주된 목적은 비밀번호에 솔트를 섞은 후 함께 해시하여 레인보우 테이블 자체를 무의미하게 만드는 것
    • 즉, 해커가 해시값을 알아내어도 레인보우 테이블에서 일치하는 비밀번호를 찾기 어려워지며 유저들의 비밀번호가
    • 같더라도 부여되는 솔트 값은 다르기 때문에 해시값도 달라지게 됨
    • 솔트는 최소 128bit 정도는 되어야 안전

     

    키 스트레칭(Key Stretching)

    • 해시 함수를 여러 번 반복하여 강제적으로 1회 대입에 걸리는 시간을 높이는 방법
    • 대입에 걸리는 시간이 조금만 길어져도 50억 번 이상 시도하기 위해서는 어마무시한 시간이 걸리기 때문에 해커들이시도조차 하지 않음
    • 또한 보통 유저들은 비밀번호를 간단하게 혹은 예측하기 쉽게 만드는 경우가 많은데 이 방법을 사용하면 더 예측하기 어렵게 만들어 진다.

    '프로그래밍 기초 공부' 카테고리의 다른 글

    온프레미스 vs 클라우드  (0) 2022.12.26
    ORM이란?  (0) 2022.12.25
    인증과 인가란?  (0) 2022.12.02
    대칭키, 비대칭키란?  (0) 2022.12.02
    람다식이란?  (0) 2022.11.26
Designed by Tistory.