Encoding / Hashing / Encryption / 대칭키암호화( AES ) / 비대칭키암호화 ( RSA )

TopOfTheHead·2025년 10월 25일

Spring Security

목록 보기
3/21

암호화
。수학적인 과정으로 어떤 정보를 읽을 수 없는 데이터로 변환하는 행위


암호화 기술에 따른 종류

  • 저장된 데이터 보호 ( Encryption At Rest )

    DB에 저장된 데이터를 보호하는 방식
    데이터 저장 시 암호화데이터를 가져올 때 복호화하여 가져오는 방식

    。주로 물리적인 기기의 저장공간에 보안을 적용하기 위해 사용
    HDD 탈취데이터 보호

    。주로 키 파일 / 암호를 사용하여 암호화 / 복호화

  • 전송 중 데이터 보호( Encryption At Transit )

    데이터 송수신 과정에 암호화를 적용하여 송수신 중 외부에서 데이터가 탈취되지 않도록 보호
    ▶ 주로 여러 시스템 / 기기 간 보안을 적용하기 위해 사용
    ex ) SSH / TLS , HTTPS


    암호화 방법에 따른 종류

  • 단방향 암호화
    암호화평문으로 복호화 불가능한 암호화 기법
    DB비밀번호 저장 시 해싱

  • 양방향 암호화
    암호화평문으로 복호화가 가능한 암호화 기법
    HTTPS 통신 / JWT 토큰 : 대칭키 / 비대칭키 암호화
  • 평문 ( Planetext )
    암호화 이전의 데이터

  • 암호문 ( Ciphertext )
    평문암호키알고리즘을 사용해 암호화데이터

  • ( Key )
    평문암호화하거나 암호문평문으로 돌리기위한 알고리즘핵심 가변정보 값

  • 암호화 알고리즘
    암호화 / 복호화를 위해 사용되는 알고리즘

  • 암호화 ( Encryption )
    。데이터의 기밀성을 보호하도록 암호문암호화 알고리즘을 적용하여 데이터를 안전하게 암호화하여 암호문으로 만드는 과정
    Encryption된 데이터는 암호화 key 없이는 원본데이터를 알 수 없게 구축.

    Encoding과 동일하게 Decryption을 수행하여 원본값으로 복호화가 가능하지만 암호키가 필요.

    。주로 보안목적으로 활용됨.

    Encryption 예시
    대칭키 암호화 , 비대칭키 암호화

  • 복호화 ( Decryption )
    암호문를 적용하여 평문으로 복구하는 과정

Encoding :
。데이터를 특정 Data type으로 변환하는 과정.
▶ 주로 미디어 데이터를 압축 및 Streaming하거나, Text 데이터를 안전하게 전송하거나 저장할 수 있도록 Data typeBinary로 변경할 때 사용.

EncodingDecoding을 통해 원래의 데이터로 복원이 가능.
。데이터의 호환성을 보장하며, 주로

Encoding 대표 예시 : ( Base64 , Wav , MP3 )

  • base64
    。이진 Binary Data를 64개로 구성된 ASCII 문자 데이터로 Encoding하여 변환.
    데이터( JSON , XML , Binary Data 등 )를 TEXT로 변환하여 안전하게 전송이 가능.

    。단순 Encoding 방식이므로, 보안성이 없어 암호화 목적으로는 사용하지 않음.
    Basic Authenticationheader를 획득 시 decoding하여 쉽게 사용자의 IDPW를 획득할 수 있으므로.

    양방향변환으로서 Base64EncodingText 데이터는 다시 Decoding하면서 원본으로 복원 할 수 있다.

    Base64 활용

    • image, file Data의 binary dataTextEncoding 후 전송하여 다시 binary dataDecoding하여 활용.

    • HTTP Basic Authentication : Basic Base64인코딩한ID:PW
      JavaScript에서 생성 시 window.btoa(문자열) 사용. ( Binary to ACSII )
      const ba = 'Basic ' + window.btoa(ID + ':' + PW)
      ▶ 현재는 JWT 사용.

Hashing 암호화 해싱
。Data를 고정된 길이의 고유한 Hash로 변환하는 과정으로 복원이 불가능한 단방향 변환.
주로 보안 및 데이터 무결성 검증에 사용

단방향변환으로 원본으로 복호화가 불가능

입력값 크기에 관계없이 고정된 길이의 Hash 생성. ( SHA-256 : 64자 )

충돌방지를 예방하기 위해 서로 다른 입력값으로 Hasing동일한 해시값을 가지지 않도록 설계
▶ 다른 해시값이 도출되지만, Decoder를 통해 동일한 원본 문자열임을 검증 가능.

Bcrypt , Scrypt을 통한 암호화 알고리즘을 사용하여 보안성 존재.
▶ 현재는 SHA-256을 사용하지 않는다.


암호화 도구

  • Bcrypt :
    암호화 도구로 사용되는 해싱 암호화 함수

    평문을 5번 해싱하여 암호화를 수행
    new BCryptPasswordEncoder(강도)를 통해 Encoder를 구현 후 Hashing을 수행

    Bcrypt$4b$12로 시작
    $4b : BCrypt 알고리즘버전 식별자
    $12 : 작업비용
    작업비용이 높을 수록, 암호화 시간이 많이 소요되므로, Trade off를 고려해야한다.


    Hashing 활용

  • 비밀번호 저장용도
    DB에 비밀번호를 특정 Hash 알고리즘으로 Hashing하여 Hash값으로 저장 및 로그인 시 DB에 저장된 Hash값을 참조하여 입력된 비밀번호를 Hashing하여 비교를 통해 검증 수행.
    Hash값은 원본으로 복원이 불가능하므로, DB에 저장 시 공격자가 DB에 Access 하더라도 Hash값만 참조가능하고 원본 PW은 확인 불가능.

  • 데이터 무결성 검증
    。파일이 변조되었는지 확인하는 용도로 사용
    데이터와 데이터의 Hash를 함께 전송하여 전송후의 데이터의 Hash가 서로 일치하는지 확인.

  • 디지털 서명 및 인증서

대칭키 암호화 방식 ( Symmetric Encryption ) : DES , AES , RC4 , ...

。단일 대칭키( Secret Key )로 암호화, 복호화를 모두 수행
Encryption, Decryption에서 발신자( Client )와 수신자( Server )가 동일한 암호화 키를 사용하여 암호화 / 복호화

구현이 간단하고 연산속도가 빠르지만, 대칭키를 안전하게 공유하는 것이 어렵다
암호문을 타인과 공유 시 공유키를 적절하게 공유할 방법도 찾아야한다.
대칭키가 탈취되는 경우 해당 데이터대칭키를 가진 제 3자가 데이터에 접근할 수 있으므로.

AES ( Advanced Encryption Standard ) :
。동일한 대칭키암호화복호화가 수행되는 대칭키 암호화 방식

비대칭키 암호화 방식 ( Asymmetric Encryption ) : RSA , ECC , DSA , ..
공개키 ( Public Key )와 비밀키 ( Private Key ) 한 쌍을 사용하여 암호화복호화를 수행하는 방식
발신자가 Encryption공개키를 사용하고, 수신자Decryption비밀키를 사용

공개키 ( Public Key )비밀키 ( Private Key ) : 각각 암호화 / 복호화만 수행할 수 있는 키쌍
공개키암호화비밀키복호화
비밀키암호화공개키복호화

공개키암호화한 경우 오직 비밀키로만 복호화가 가능하며 동일한 공개키로는 복호화가 불가능.

대칭키 암호화 방식에 비해 데이터를 안전하게 공유가 가능하지만 복잡한 연산을 수행하므로 연산속도가 느리고, 키 길이가 길어야 보안이 보장.

。데이터를 위조할 수 없도록 보장하므로 디지털 서명이 가능.

RSA ( Rivest-Shamir-Adleman ) :
공개키( Public Key )로 데이터를 암호화하고 비밀키( Private Key )로 복호화하는 비대칭키 암호화 방식
JWT Token에서 활용하는 방식.

비대칭키 암호화 방식 키 종류

공개키 ( Public Key ) : Encryption 시 활용하며 모두에게 공개되어있는 키

비밀키 ( Private Key ) : Decryption 시 활용하며 오직 본인만 알 고 있어야한다.
비밀키는 반드시 안전하게 보관해야한다.

  • 공개키 / 비밀키암호화 여부에 따른 장점
    HTTPS - CA
    • 공개키 암호화 :
      공개키암호화비밀키로만 복호화 가능
      비밀키를 공유할 필요가 없으므로 안전

      ex) HTTPS에서 클라이언트에서 인증서 ( = 서버 공개키 )로 세션키암호화
      서버에서 암호화세션키서버 비밀키복호화

    • 비밀키 암호화 :
      비밀키암호화공개키복호화
      공개키는 모두에게 공개 및 인증된 기관에서 암호화한 것임을 지시하여 신뢰성 보장

      ex ) HTTPS에서 서버CA에게 공개키를 전달 시 CA 비밀키공개키암호화인증서 생성
      클라이언트에서 해당 인증서CA 공개키를 다운로드하여 복호화

      암호화 서명( Signing )
      비밀키를 사용해서 데이터생성자가 해당 데이터를 생성했음을 보장하는 방법
      데이터 생성 후 비밀키를 사용하여 서명

      。이후 사용자가 해당 생성자 출처의 데이터인지 확인하기 위해 공개키를 통해 복호화 시도
      복호화가 되는 경우 해당 생성자가 만든 데이터.

      。 주로 어플리케이션이 가진 비밀키서명URL을 통해 AWS자원에 접근 시 사용되는 방식.

profile
공부기록 블로그

0개의 댓글