컴퓨터 보안 - [Symemetric Key]

윤형·2024년 9월 6일

Security

목록 보기
1/14

💡컴퓨터 보안이란?

컴퓨터 보안의 기본 3원칙을 CIA라고 한다.
1. Confidentiality(기밀성)
2. Integrity(무결성)
3. Availablity(가용성)

컴퓨터 보안에서 가장 중요한것은 위의 3가지이다. 또한 추가적으로 Authentication도 매우 중요하다고 할 수 있다.


1. Confidentiality(기밀)

: 데이터가 인가되지 않은 사람에게 새어나가지 않는 것
: 기밀성을 해치는 공격: Snooping(스누핑), Traffic Analysis(트레픽 분석)

2. Integrity(무결)

: 데이터가 변조되지 않는것
: 무결성을 해치는 공격: Modification(변경), Masqueraing(가장), Replaying(재연), Repudiation(부인)

3. Availability(가용)

: 허용된 사람들이 데이터를 이용할 수 있는 것
: 가용성을 해치는 공격: Denial of Service(서비스 거절)

4. Authentication

: 송수신자 서로간의 신원 확인을 하는 것
: 인증을 해치는 공격: Impersonation(신원 도용)

Cryptography(암호학)

암호화 방식

  1. 대칭키 암호화
    • 동일한 키를 사용하여 데이터를 암호화 하고 복호화합니다.
  2. 비대칭 키 암호화
    • 공개 키와 개인 키의 쌍을 이용합니다. 공개 키로 암호화된 데이터는 해당하는 개인 키로만 복호화 할 수 있습니다.
  3. 해시 함수
    • 임의의 길이의 데이터를 고정된 길이의 해시 값으로 변환합니다. 주로 데이터의 무결성을 검증하는데 사용됩니다.

Steganography(스테가노그래피)

정보를 숨기는 기술로, 메시지나 데이터를 다른 형식의 데이터 안에 은폐하는 방법이다. 암호화랑은 달리 정보의 존재 자체를 숨기는데 주안점을 둔다.

예시 링크: https://incoherency.co.uk/image-steganography



1세대 암호

Shift(Caesar) cipher

글자들을 정해진 키 수 만큼 이동(shift)한 글자와 바꾼다.

암호화:

def encrypt(text,key):
  result = ""
  for i in text:

    if(i.isupper()):
      result += chr((ord(i) + key-65) % 26 + 65)
    else:
      result += chr((ord(i) + key-97) % 26 + 97)

  return result

msg = input("plaintext : ")
key = input("key : ")

ciphertext = encrypt(msg, int(key))
print(ciphertext)

복호화:

LETTERS = 'abcdefghijklmnopqrstuvwxyz'

for key in range(len(LETTERS)):
  translated = ''
  for symbol in ciphertext:
    if symbol in LETTERS:
      num = LETTERS.find(symbol)
      num -= key
      if num < 0 :
        num += len(LETTERS)
      translated += LETTERS[num]
    else:
      translated += symbol
  print('Hacking key #%s: %s' % (key,translated))

affine(아핀) cipher

: 문자에 수학적인 연산을 적용하여 암호문을 생성한다.

  • 두 정수 (a, b)를 선택한 후, 평문 m을 c≡am+b (mod 26)로 암호화
    (a는 26과 서로소이다.) , (≡는 두 표현이 항상 같은 값을 같는다는 뜻)

  • a가 26과 서로소이므로 da≡1(mod 26)인 D가 존재한다.
    암호문 c를 d(b-c)= (da)m = m (mod 26)

  • a=1이면 shift암호임

Substitution Cipher

: 각 문자를 다른 정해진 문자로 치환한다.
-> 가장 많이 나오는 모양 : e

Vigenere Cipher

: 비즈네르 암호 설명

  • 암호화 키를 선택 (5,22,3,14)
  • 평문 : (2,7,24,15,19,14)
  • 암호화 : (2,7,24,15,19,14) + (5,22,3,14,5,22) = 번호에 맞는 알파벳 대응

2세대 암호

<특징>

  • 전신의 등장과 1차 세계대전의 영향으로 크게 발전
  • 복잡한 기계들의 등장으로 수학적 계산이 필요해짐
  • 컴퓨터의 출현으로 무용지물이 됨
  1. 독일의 Enigma - 2차대전 주역
  2. Alan Turing
    • Enigma 해독
    • 최초의 컴퓨터 colossus제작
    • 인공지능 시조, 컴퓨터 이론 확립

현대 암호(3세대 암호)

Encryption Key와 Decryption Key가 같으면 Symmetric, 다르면 Public


1. Block VS Stream

Block과 stream cypher는 암호화할 데이터 type에 의해 결정한다.

예시cypher설명
영화 파일Block영화 데이터는 이미 있으므로 한비트씩 암호화 하는것 보다는 전체를 하는게 더 빠름
실시간 방송stream나눌 수 있는 데이터가 없으므로 데이터가 생성되는 즉시 암호화를 함

Block Cipher

  • 긴 평문을 일정한 길이의 블록으로 나누어 블록단위 암호화 하는 방식
  • SW구현이 쉽다.
  • Round를 사용하여 반복적으로 암호화 하므로 안전함
  • 대부분 Feistel cipher structure에 기반함
  • DES, AES, SEED, ARIA, Bluefish, Serpent등이 있다.

Feistel cipher structure이란?
1. 입력 Block을 반으로 나눈다.(L,R)
2. 여러번의 라운드를 반복하여 데이터를 암호화 한다.
3. 라운드: 오른쪽 부분(R)을 사용하여 특정함수를 통해 새로운 값을 계산한다. 이 값을 왼쪽 부분(L)과 XOR연산을 합니다. 그런 다음 왼쪽과 오른쪽을 바꿉니다.

DES

  • Feistel cipher structure
  • Block size = 64bit, key size = 56bit
  • 16round
  • 1997년 보안 허점이 발견되었다.
  • 현재는 3-DES등으로 업그레이 됐으며, 현재에도 대표적인 블록 사이퍼로 사용중임

AES

  • Block size = 128bit, key size = 128,192,256bit
  • 각 키 사이즈에 따라 10,12,14 rounds

Block Operation Mode

  • Block cypher을 사용할때, 각 블록을 어떻게 처리할지 정의하는 방식입니다. 여러 블록을 암호화 하는 방법 즉, 연결 방식이나 암호화 절차를 규정합니다.
  • ECB(Electronic Code Block)
  • CBC(Cipher Block Chaining)
  • CFB(Cipher FeedBack)
  • OFB(Output FeedBack)

ECB(Electronic Codebook)

  • 각 Block이 독립적이다.
  • (+)simple하고 병렬처리에 용이하다
  • (-)같은 평문에 대해서는 동일한 암호문을 생성함

CBC(Cipher Block Chaining)

  • Chain: 뒤에 것을 앞에 연결
  • 앞의 C1을 뒤에있는 P2와 XOR해 암호 알고리즘에 적용시킴
  • (+) 같은 평문이여도 다른 암호문을 생성함 -> 보안성 좋음
  • (-) Error Propagation -> 에러 전파 -> 앞에 알고리즘에서 문제가 생기면 그 뒤에 있는 블록들 알고리즘도 전부다 에러 발생
  • (-) 병렬처리가 아니여서 속도는 ECB보다 느림

CFB(Cipher FeedBack)

  • Feedback : 출력을 입력으로 넣어준다.
  • 초기 블럭을 암호화 하여 결과를 평문 Block과 XOR한다.
  • 결과는 다음 encrypt시에 입력으로 사용
  • 평문을 직접 암호화 하는것은 아님
  • (+) 같은 평문이여도 결과값이 다름
  • (-) Error Propagation
  • (-) 직렬이라 속도가 느림 (CBC보다는 빠름)

OFB(Output Feedback)

  • 장단점은 CFB랑 같다.
  • OFB는 암호화 알고리즘의 결과물(output)이 Feedback됨
  • CFB는 XOR해서 나온 값을 Feedback함
  • CFB보다 근소하게 빠름 -> XOR을 기다리지 않고 다음 블록 계산을 시작하기 때문에

Stream cipher

  • Block을 만들 수 없을때 -> 실시간 데이터 생성
  • 평문을 1bit씩 순차적으로 암호화 하는 방식
  • 평문과 난수 키 스트림을 1bit씩 단순 XOR
  • 빠르다(단순 XOR이라)
  • Block보다 보안성이 떨어짐
profile
제가 관심있고 공부하고 싶은걸 정리하는 저만의 노트입니다.

0개의 댓글