[Network] 암호기술, 암호화 알고리즘

joyful·2021년 7월 25일
2

CS

목록 보기
6/14

📖 암호기술

1.1 정의

중요한 정보를 읽기 어려운 값으로 변환하여 제 3자가 볼 수 없도록 하는 기술

1.2 용어

용어설명
평문
(plaintext)
암호기술을 통해 보호하고자 하는 원본 데이터
암호문
(ciphertext)
평문에 암호기술을 적용한 것
암호화평문에 암호기술을 적용하여 암호문으로 변환하는 과정
복호화암호문을 평문으로 복원하는 과정
암호키◾ 평문을 암호화하기 위해 필요한 키
◾ 키가 있어야만 암호문을 복호화 할 수 있음
∴ 암호 키는 비밀(secret)로 유지되어야 하며 제 3자가 알 수 없어야 함

1.3 기능

기능설명
기밀성
(Confidentially)
허락되지 않은 사용자 또는 객체가 정보의 내용을 알 수 없도록 하는 성질
무결성
(Integrity)
허락되지 않은 사용자 또는 객체가 정보를 함부로 수정할 수 없도록 하는 성질
인증
(Authentication)
사용자 또는 객체의 디지털 정체성을 식별
부인방지
(Non-repudiation)
정보를 보낸 사람이 나중에 정보를 보냈다는 것을 부인하지 못하도록 함

1.4 종류

  • 대칭키 암호
  • 비대칭키 암호
  • 해시 함수

📖 암호화 알고리즘

🔎 양방향

1.1 대칭키(비밀키) 암호(symmetric-key algorithm)

암·복호화에 같은 암호 키를 쓰는 알고리즘

1.1.1 특징

  • 키 크기가 상대적으로 작으며, 암호 알고리즘 내부 구조(치환+전치)가 단순함

    • 치환 암호 : 평문 문자를 다른 문자로 어떠한 규칙에 따라 대응시켜 암호화 하는 방식
    • 전치 암호 : 평문 문자의 자리를 바꾸는 방식
    • 시스템 개발 환경에 용이
    • 비대칭키에 비해 암·복호화 속도가 빠름
  • 교환 당사자(송·수신자) 간에 동일한 키 공유 필요

    • 많은 사람들과의 정보 교환 시 키 관리가 어려움
    • 잦은 키 변경 시 불편함 초래
    • 디지털 서명 기법에 적용하기 곤란함
    • 안전성을 분석하기 어려움
    • 중재자(신뢰할만한 제3자)가 필요

1.1.2 종류

📝 블록 암호(Block Cipher)

암호문을 만들기 위해 암호 키와 알고리즘이 데이터 블록 단위로 적용되는 암호화 방법

  • 개요

    • 평문을 고정된 크기의 블록단위로 암·복호화 수행
      → 패딩(padding) 기법 이용

      💡 패딩(padding)

      블록암호 알고리즘에서 블록의 크기를 일정하게 맞추기 위해 빈 부분을 채워주는 것

    • 각 블록마다 동일한 키 사용

    • 하나의 키로 여러 블록을 안전하게 처리하기 위해 운용 방식(mode of operation) 절차 이용

      💡 운용 방식(mode of operation)

      블록 암호는 특정한 길이의 블록 단위로 동작하므로, 암호화를 위해 가변 길이 데이터를 단위 블록들로 나누고 그 블록들의 암호화 방식을 결정하는 것을 의미한다.

    • 이전 암호 블록의 암호문을 다음 블록에 순서대로 적용

    • 라운드 함수를 사용해 반복적인 암호화 과정 수행
      → 암호화 강도 향상

      *라운드 함수 : 암호화 방식은 특정 계산 함수의 반복으로 이루어지며, 이 때 각 과정에 사용되는 함수를 의미

  • 구조

    • 페이스텔(Feistel)
      • 암·복호화 과정이 동일
      • 평문을 좌, 우로 나누어 뒤집고 XOR과 같은 과정을 지나 혼돈과 확산 충족
        • 혼돈
          • 평문과 암호문의 상관 관계를 없애는 성질
          • 평문 문자를 다른 문자로 '치환'하는 행위
        • 확산
          • 평문에서 나타나는 문자의 빈도수를 없애는 성질
          • 평문의 문자 위치를 '이동'하는 행위
    • SPN(Substitution-Permutation Network)
      • 대체(substitution)와 치환(permutation)을 이용하여 연산 실행
      • 병렬 연산 가능
      • 페이스텔 구조에 비해 연산속도가 빠름
      • 복호화 시 복호화 루틴을 별도로 구현해야 함
  • 종류

    종류키 길이블록 크기라운드 수구조개발 국가비고
    DES56bit64bit16번Feistel미국AES 이전 미국 표준
    3DES112/168bit64bit16*3번Feistel미국DES의 취약점 보완 및
    호환성 유지 임시방편
    SEED128, 256bit128bit16, 24번Feistel한국,
    KISA
    ARIA 이전 국내 표준
    AES128/192/256bit128bit10/12/14번SPN미국현 미국 표준
    ARIA128/192/256bit128bit12/14/16번SPN한국,
    NSRI
    현 국내 표준
    IDEA128bit64bit8번Lai-Massey
    schema
    유럽현 국제 표준
    (PGP에서 사용)
    Rijndael
    (AES 선정)
    128/192/256bit128bit10/12/14번벨기에
    CRYPTON128/192/256bit128bit한국
    HIGHT64bit한국
    LEA128bit128bit한국
    FEAL64bit64/128bit4/8/32일본
    MISTY128bit64bit8일본
    SKIPJACK80bit64bit32미국
    RC50-2040bit32/64/128bit미국
  • 특징

    장점단점
    소프트웨어적으로 구현 가능느린 암호화 속도
    전치와 치환 반복
    → 평문과 암호문으로부터 key에 대한 정보를
    찾아내기 어렵게 함
    에러 전파
    데이터 전송 및 대용량 데이터 저장 시 사용 가능데이터의 크기가 작을 경우 비효율적

    💡 소프트웨어 암호화 vs 하드웨어 암호화

    • 소프트웨어 암호화 : 소프트웨어 도구를 사용하여 데이터를 암호화 하는 것
    • 하드웨어 암호화 : 물리적 하드웨어를 사용하여 데이터를 암호화 하는 것으로, 호스트 시스템과 암호화 프로세스가 분리되어 있음

📝 스트림 암호(Stream Cipher)

데이터 흐름인 스트림(stream)을 비트(bit) 단위로 순차적으로 처리하는 암호 알고리즘

  • 개요

    • 원타임패드(One Time Pad, OTP)의 실용적인 구현을 목적으로 개발

      *원타임패드 : 일회용 패드로서 키(key=pad)를 딱 한 번 쓰도록 설계된 암호체계

    • 평문과 동일한 길이의 키스트림(key strema) 수열을 생성 후 평문과의 XOR 연산을 통하여 암·복호화 수행

      여기서의 수열은 완전히 랜덤한 수열은 아니지만, 의사적으로 랜덤하게 만들어진 패턴 수열인 의사난수열을 의미함

  • 방식

    • 동기식 스트림 암호(Synchronous Stream Cipher)

      키스트림 수열 생성 시 평문과 독립적으로 생성

      • 암·복호화에서 상호 동기화 필수

        💡 동기화

        • 프로세스들이 서로 동작을 맞추는 것
        • 프로세스들이 서로 정보를 공유하는 것
      • 암호문이 전송 중 변조되어도 후속 암호문이 오류의 영향 받지 않음
      • 의도적인 변조 복호화 단계에서 검출 불가능
    • 비동기(자기동기)식 스트림 암호(Asynchronous Stream Cipher)

      키스트림 수열 생성 시 평문이 키스트림 수열에 영향을 미침

      • 암호문이 전송 중 변조되어도 자기 동기화 가능

        *비동기(자기동기, 종속적)식 : 내부상태에 의존하지 않아 동기화가 필요하지 않은 경우

      • 변조된 암호문이 후속 암호문의 복호화에 사용 x
        → 제한적인 오류 파급
  • 종류

    • A5/1, A5/2, A5/3

      • GSM에서 데이터를 암·복호화할 때 사용되는 스트림 암호

        💡GSM(Global System for Mobile communication)

        • 유럽 국가를 기준으로 중국, 러시아, 인도 등 전 세계적으로 널리 채택되어 2004년 세계 이동통신 가입자 중 70% 이상이 사용하는 이동통신 방식
        • 일반적인 채널과 한 방향에서 4.615 ms마다 1개의 버스트 전송
      • 각 버스트에 대해 114bit 시퀀스 생성

      • 22bit 프레임 번호 + 64bit 키로 초기화

      • 유효 키 길이 : 54bit → Comp128v3 도입으로 64bit로 수정

      • A5/1과 A5/2의 안전성 취약으로 인해 A5/3 개발

      • 비동기식 알고리즘

    • RC4

      RSASecurity를 위해 론 리베스트(Ron Rivest)에 의해 1987년 고안된 스트림암호 방식

      • 바이트 단위의 작용에 대해 다양한 키 사이즈를 갖음
      • 랜덤 치환사용 기반 = 테이블 셔플링(Table shuffling) 방식
        1. 송신자가 비밀 키를 이용하여 256개의 바이트를 섞음
        2. 특정한 위치의 두 지점을 이용하여 바이트 중 하나를 골라 키 스트림으로 사용
        3. 평문과 XOR 연산으로 암호화
        4. 두 개의 위치를 바꾸어 다시 섞은 후 다시 특정 위치의 바이트를 키 스트림으로 반복하여 사용
        → 필요한 만큼 연산 수행하여 키 스트림을 얻음
      • SSL/TLS에서 주로 사용
      • 취약점 발견으로 인해 사용 권장하지 않음
      • 동기식 알고리즘
  • 특징

    장점단점
    오류 확산 x비트 단위 암호화 → 많은 시간 소요
    하드웨어적 구현 가능데이터 흐름에 따른 비트 단위 순차 처리
    → 내부 상태 저장 필요
    이동통신 환경에서 구현 용이
    → 무선 데이터 보호에 이용
    평문 길이 증가 시 키 길이 증가 → 비효율적
    실시간성 서비스에 사용
    ex) 음성, 영상, 스트리밍 전송 등
    선형성으로 인해 공격에 취약

1.2 비대칭키(공개키) 암호(Public-key Encryption)

암호화와 복호화에 서로 다른 키를 사용하는 알고리즘

  • 개요

    • 비밀키 암호화 기법에서의 보안성 및 키 개수의 기하급수적인 증가를 개선하기 위해 고안된 방법

    • 두 개의 키를 각각 A, B라고 할 때, 키 A로 암호화한 암호문은 키 B로만 복호화 가능

      개인키(=비밀키)공개키
      설명사용자 본인만 알고있는 키공중에게 공개해도 상관없는 키
      사용복호화암호화

      → 통상적인 사용을 위해 둘 중 하나의 키는 반드시 공개해야 함

  • 특징

    • 키 배송 문제 해결

      💡 키 배송 문제

      송신 측에서는 수신 측에 암호키를 전달하기 위한 안전한 방법이 존재하지 않는 문제

    • 대칭키 암호화 방식에 비해 느림
      • 대칭형 암호 키 배송에 비대칭형 암호 사용
      • 실제 암호문은 대칭형 암호 사용
    • 여러 송신자가 하나의 공개키로 암호화 수행
      → 사용자 수에 상관없이 키 관리
    • 중간자 공격에 취약

      💡 중간자 공격(MITM, Man In the Middle Attack)

      해커가 중간에서 통신을 가로채어 수신자에게 송신자인 척, 송신자에게 수신자인 척 하여 양쪽의 공개키와 실제 암호화에 사용되는 대칭키를 모두 얻어내는 기법

  • 종류

구분특징방식장점단점
Diffie-
Hellman
◾ 최초의 공개키 알고리즘
◾ 키 분배 전용 알고리즘
이산대수◾ 키 분배에 최적화
◾ 키는 필요시에만 생성
◾ 키 저장 불필요
◾ 암호 모드로 사용 불가
(인증 불가)
◾ 위조에 취약
Elgamal◾ 디피-헬먼 알고리즘 확장
◾ 이산대수의 어려움 이용
이산대수매 암호화 시 다른 암호문 획득
→ RSA에 비해 더 안전
가장 느림
DSA전자서명 알고리즘 표준이산대수간단한 구조◾ 전자서명 전용
◾ 암호화 키 교환 불가
RSA대표적 공개키 알고리즘인수분해여러 라이브러리 존재컴퓨터 속도의 발전
→ 키 길이 증가
Rabin매우 간단한 암호화
(한 번의 곱셈)
인수분해빠른 암호화
→ 성능이 낮은 플랫폼에서 활용
선택 암호문 공격에 취약
quadratic residue modulo
관련 공격에 취약
ECC◾ 짧은 키로 높은 암호 강도
◾ 무선환경에 적합
ex) PDA, 스마트 폰, 핸드폰
타원곡선◾ 오버헤드 적음
◾ 160 키 = RSA 1024
키 테이블(20KB) 필요

1.3 대칭키 암호화와 공개키 암호화 방식의 차이점

항목대칭키 암호화공개키 암호화
키 관계암호화 키 = 복호화 키암호화 키 ≠ 복호화 키
안전한 키 길이128Bit 이상2048Bit 이상
구성비밀키공개키, 개인키
키 개수N(N-1)/22N(키 쌍으로는 N)
대표적인 예DES, 3DES, AESRSA, ECC
제공 서비스기밀성기밀성, 부인방지, 인증
목적데이터 암호화대칭키 암호화 전달(키 분배용)
단점◾ 키 분배 어려움
◾ 확장성 떨어짐
중간자 공격(PKI로 대응)
암호화 속도공개키(비대칭키)보다 빠름대칭키보다 느림

🔎 단방향 - 해시(Hash)

키(key) 값을 해시 함수(Hash Function)에 대입시켜 계산한 후 나온 결과를 주소로 사용하여 값(value)에 접근할 수 있게 하는 방법

💡 해시(Hash)

임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수


✅ 개요

  • 암호화와는 다른 개념

    • 암호 : 정보를 숨기기 위함
    • 해시 : 정보의 위변조(무결성)를 확인하기 위함
  • 암호화 O, 복호화 X
    → 복호화하지 않아도 되는 정보가 존재함 ex) 패스워드


✅ 종류

  1. 분류대표 알고리즘MD 길이블록 길이최대 메시지 길이개발사
    MD5MD5128bit512bit무한로널드 라이베스트
    RIPEMDRIPEMD-160160bit512bit2^64-1bit
    SHA-1SHA-1160bit512bit2^64-1bitNSA
    SHA-2SHA-224224bit512bit2^64-1bit
    SHA-256256bit512bit2^64-1bit
    SHA-384384bit1024bit2^128-1bit
    SHA-512512bit1024bit2^128-1bit
  2. SHA-3

  • 공개적인 방식을 통해 후보를 모집 후 함수 안정성을 분석하여 선정한 알고리즘
  • 항목출력 크기비율 = 블록 크기용량
    SHA3-224(M)2241152448
    SHA3-256(M)2561088512
    SHA3-384(M)384832768
    SHAKE128(M, d)d1344256
    SHAKE256(M, d)d83212



📖 참고

profile
기쁘게 코딩하고 싶은 백엔드 개발자

0개의 댓글