DEV ℧ Developer Diary

[Security] 암호화 알고리즘

단반향 암호화와 양방향 암호화

암호화 알고리즘은 먼저 단방향 암호화와 양방향 암호화로 분류된다. 단방향 암호화는 암호화를 수행하지만 복호화는 진행할 수 없는 암호화 알고리즘이며 대표적인 예시로 Hash 알고리즘이있다. 양방향 암호화는 암호화를 수행하고 복호화 할 수 있는 키를 이용하여 암호화된 평문을 복호화 할 수 있는 암호화 알고리즘이다. 대표적인 예시로는 세부적인 종류는 다르지만 AES, RSA 등등이 있다.

단방향 암호(Hash)의 암호화

평문을 암호문으로 암호화하지만 복호화는 불가능한 알고리즘이다. 주로 검증에 쓰이는데, 대표적인 예시로 계정의 비밀번호를 검증하는데 사용한다.

단방향 암호(Hash) 알고리즘의 종류

  • SHA-256

    • SHA(Secure Hash Algorithm)알고리즘의 한 종류로서 256비트로 구성되며 64자리 문자열을 반환한다.
    • SHA-256 해시함수는 어떤 길이의 값을 입력하더라도, 256비트의 고정된 결과값을 출력한다.
    • 현재 블록체인에서 가장 많이 채택하여 사용되고 있는 암호 방식이다.

양방향 암호의 암호화

양방향 암호는 크게 대칭형 암호화 비대칭형 암호 두가지로 나눌 수 있다.

  • 대칭형 암호 : 암호화와 복호화에 같은 암호키를 사용하는 암호화 알고리즘이다.
  • 비대칭형 암호 : 암호화와 복호화에 다른 암호키를 사용하는 암호화 알고리즘이다.

대칭형 암호

앞서 간단한 설명과 같이 암호화와 복호화에 동일한 암호키를 사용하다 보니, 암호화 된 정보를 전달하고 확인하기 위해서는 송신자, 수신자가 동일한 키를 가지고 있어야 한다.

키크기가 상대적으로 작고 암호 알고리즘 내부 구조가 단순하여, 시스템 개발에 용이하고, 비대칭키에 비해 암호화와 복호화의 속도가 빠르다. 다만 송신자, 수신자가 동일한 키를 공유해야 하기 때문에, 중간에 암호화키를 강탈당한다면, 쉽게 데이터를 빼앗길 수 있다.

대칭형 암호의 종류

많은 대칭형 암호가 있지만 대표적으로 몇가지만 소개해 보겠다.

  1. DES(Data Encryption Standard)

    • 미국 정부의 상무부 표준국(NBS)이 1977년에 IBM사에 제안을 바탕으로 제정한 데이터 암호화 표준 규격이다.
    • 데이터 암호화 표준(DES)은 64비트 평문을 64비트 암호문으로 암호화 하는 대칭키 암호 알고리즘이다.
    • DES의 암호화 키에는 7비트마다 오류검출을 위한 정보가 1비트씩 들어간다. 그러므로 실질적 길이는 56비트이다.
    • 56비트의 암호키 길이를 112비트로 늘려서 암호화하는 2중 DES, 3중 DES 암호화 방식도 있다.
  2. AES(Advanced Encryption Standard)

    • NIST에서 1997년 더이상 안전하지 않게된 DES를 대체 하기 위해 AES라는 이름의 표준으로 제정할 것을 발표했다.
    • 대칭형 암호화 알고리즘 중 가장 유명한 알고리즘이다.
    • 암호화 키는 128, 192, 256의 세 가지 중 하나가 될 수 있으며, 각각 AES-128, AES-192, AES-256으로 불린다.

비대칭형 암호

비대칭키는 공개키(public key)와 개인키(private key)가 하나의 쌍을 이루고 있다. 공개키는 다른사람들에게 공개 된 키로 정보를 암호화 할 수 있는 공개키와 사용자 본인만 알고 있어서 암호를 풀 수 있는 키인 개인키로 이루어져 있다.

보통 openssl을 통해 자체 서명 인증서 만들때 접할 수 있는데, 인증서 제작 과정중 만드는 public key와 private key가 비대칭키 에 해당한다.

비대칭형 암호의 종류

  • RSA

    • 공개키 암호 시스템의 하나로 암호화 뿐만 아니라 전자서명이 가능한 최초의 알고리즘으로 알려졌다.
    • RSA의 명칭은 이 체제를 개발한 세사람의 성을 따서 RSA라고 명명했다.
    • 공개키는 메시지를 암호화할 때 사용하고, 개인키는 암호화된 메시지를 복호화 할 때 사용한다.
    • RSA방식을 이용한 알고리즘 간단하게 다음과 같다

      1. A가 공개키와 개인키를 생성한다.
      2. A에게 정보를 보낼 경우 A가 생성한 공개키를 이용해 암호화 한 뒤 A에게 정보를 전송한다.
      3. A가 정보를 받으면 가지고 있던 개인키를 이용해 전송받은 암호화 평문을 복호화 한다.