컴퓨터 보안의 기본 3원칙을 CIA라고 한다.
1. Confidentiality(기밀성)
2. Integrity(무결성)
3. Availablity(가용성)
컴퓨터 보안에서 가장 중요한것은 위의 3가지이다. 또한 추가적으로 Authentication도 매우 중요하다고 할 수 있다.
: 데이터가 인가되지 않은 사람에게 새어나가지 않는 것
: 기밀성을 해치는 공격: Snooping(스누핑), Traffic Analysis(트레픽 분석)
: 데이터가 변조되지 않는것
: 무결성을 해치는 공격: Modification(변경), Masqueraing(가장), Replaying(재연), Repudiation(부인)
: 허용된 사람들이 데이터를 이용할 수 있는 것
: 가용성을 해치는 공격: Denial of Service(서비스 거절)
: 송수신자 서로간의 신원 확인을 하는 것
: 인증을 해치는 공격: Impersonation(신원 도용)
정보를 숨기는 기술로, 메시지나 데이터를 다른 형식의 데이터 안에 은폐하는 방법이다. 암호화랑은 달리 정보의 존재 자체를 숨기는데 주안점을 둔다.
예시 링크: https://incoherency.co.uk/image-steganography
글자들을 정해진 키 수 만큼 이동(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))
: 문자에 수학적인 연산을 적용하여 암호문을 생성한다.
두 정수 (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암호임
: 각 문자를 다른 정해진 문자로 치환한다.
-> 가장 많이 나오는 모양 : e
: 비즈네르 암호 설명
<특징>
- 전신의 등장과 1차 세계대전의 영향으로 크게 발전
- 복잡한 기계들의 등장으로 수학적 계산이 필요해짐
- 컴퓨터의 출현으로 무용지물이 됨
Encryption Key와 Decryption Key가 같으면 Symmetric, 다르면 Public
Block과 stream cypher는 암호화할 데이터 type에 의해 결정한다.
| 예시 | cypher | 설명 |
|---|---|---|
| 영화 파일 | Block | 영화 데이터는 이미 있으므로 한비트씩 암호화 하는것 보다는 전체를 하는게 더 빠름 |
| 실시간 방송 | stream | 나눌 수 있는 데이터가 없으므로 데이터가 생성되는 즉시 암호화를 함 |
Feistel cipher structure이란?
1. 입력 Block을 반으로 나눈다.(L,R)
2. 여러번의 라운드를 반복하여 데이터를 암호화 한다.
3. 라운드: 오른쪽 부분(R)을 사용하여 특정함수를 통해 새로운 값을 계산한다. 이 값을 왼쪽 부분(L)과 XOR연산을 합니다. 그런 다음 왼쪽과 오른쪽을 바꿉니다.
- Feistel cipher structure
- Block size = 64bit, key size = 56bit
- 16round
- 1997년 보안 허점이 발견되었다.
- 현재는 3-DES등으로 업그레이 됐으며, 현재에도 대표적인 블록 사이퍼로 사용중임
- Block size = 128bit, key size = 128,192,256bit
- 각 키 사이즈에 따라 10,12,14 rounds
- 각 Block이 독립적이다.
- (+)simple하고 병렬처리에 용이하다
- (-)같은 평문에 대해서는 동일한 암호문을 생성함
- Chain: 뒤에 것을 앞에 연결
- 앞의 C1을 뒤에있는 P2와 XOR해 암호 알고리즘에 적용시킴
- (+) 같은 평문이여도 다른 암호문을 생성함 -> 보안성 좋음
- (-) Error Propagation -> 에러 전파 -> 앞에 알고리즘에서 문제가 생기면 그 뒤에 있는 블록들 알고리즘도 전부다 에러 발생
- (-) 병렬처리가 아니여서 속도는 ECB보다 느림
- Feedback : 출력을 입력으로 넣어준다.
- 초기 블럭을 암호화 하여 결과를 평문 Block과 XOR한다.
- 결과는 다음 encrypt시에 입력으로 사용
- 평문을 직접 암호화 하는것은 아님
- (+) 같은 평문이여도 결과값이 다름
- (-) Error Propagation
- (-) 직렬이라 속도가 느림 (CBC보다는 빠름)
- 장단점은 CFB랑 같다.
- OFB는 암호화 알고리즘의 결과물(output)이 Feedback됨
- CFB는 XOR해서 나온 값을 Feedback함
- CFB보다 근소하게 빠름 -> XOR을 기다리지 않고 다음 블록 계산을 시작하기 때문에