일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- network object pooling
- animation
- Replication
- 게임개발
- listen server
- stride
- 언리얼엔진
- ability task
- UI
- gas
- 언리얼 엔진
- 유니티
- CTF
- MAC
- gameplay tag
- Multiplay
- nanite
- unity
- photon fusion2
- gameplay ability system
- 게임 개발
- rpc
- map design
- os
- 보안
- gameplay effect
- Unreal Engine
- Aegis
- local prediction
- attribute
- Today
- Total
Replicated
블록 암호와 패딩, 운영 모드 본문
블록 암호
- 평문과 암호문이 고정된 크기의 블록으로 구성
- 평문을 일정 크기의 블록으로 나눈 후 블록 단위 암호문 구성
- 블록 크기를 맞추기 위한 패딩 필요 (모두 필요한 건 아니고)
- 혼돈(Confusion) & 확산(Diffusion)
- P-Box(Permutation Box), S-Box(Substitution Box), XOR, Shift, Swap..
- 다양한 키 길이에 따라 여러 라운드를 반복 실행, 혼돈과 확산을 높임
블록 암호 패딩
- 입력 데이터가 블록 크기 배수가 아닐 때, 배수가 되도록 채움
- 복호화 시 원본 메시지의 끝, 패딩의 시작 구분 가능해야 함
- 메시지 복호화가 정상적으로 실행되었는지 검증 기능 제공
- 메시지가 블록 크기의 배수이면? => 패딩 블록 추가 (블록 하나 통으로 패딩)
패딩 종류
PKCS#7 패딩
- 가장 많이 사용
- 부족한 바이트 수만큼 해당 바이트 값 채움 ( ~~~ || 0x04 || 0x04 || 0x04 || 0x04 )
Zero 패딩
- 부족한 바이트를 0x00으로 채움.. 근데 마지막 데이터의 바이트가 0x00이면 어떻게 알지? -> TLV 포맷 사용
- TLV 포맷.. Tag: 뭐가 있다 Length: 몇 바이트이다 Value: 값
ANSI X.923 패딩
- 마지막 바이트에 패딩 길이를 표시, 0x00으로 채움 ( ~~~ || 0x00 || 0x00 || 0x00 || 0x04 )
ISO 10126 패딩
- 마지막 바이트에 패딩 길이를 표시, 나머지는 랜덤값으로 채움 ( ~~~ || 0x?? || 0x?? || 0x?? || 0x04 )
* TLV(Tag-Length-Value) 포맷
- 데이터 구조화 방식
- Tag: 데이터 유형 / Length: Value 길이 / Value: 데이터
- 유연성, 확장성
- 네트워크 프로토콜, X.509 인증서(ASN.1 인코딩) 등
블록 암호 운영 모드
- ECB, CBC, CTR, CFB, OFB, PCBC
- ECB, CBC, PCBC -> 그냥 블록
- CTR, CFB, OFB -> 스트림 암호와 유사하게 동작
ECB (Electronic Codebook)
- 각 블록을 동일한 키로 암호화
- 각 블록별 독립 처리, 한 블록의 오류는 다른 블록에 영향을 주지 않음
- 구현이 간단, 병렬처리 가능
- 동일한 평문 블록은 동일한 암호문 블록을 생성
CBC (Cipher Block Chaning)
- IV(Initial Vector) 또는 이전 암호문 블록과 XOR 후 암호화
- 한 블록의 오류 -> 다음 블록에 영향
- IV 따라 동일한 평문이 다른 암호문
- 암호화 시 병렬 처리가 불가능 (복호화는 가능)
PCBC (Propagating Cipher Block Chaining)
- CBC의 변형, 각 단계에서 이전 평문과 암호문을 입력으로 사용 (이전 평문-암호문 XOR 후 현 평문과 XOR)
- 한 블록의 오류 발생 시 이후 모든 블록에 영향(강력한 오류 전파)
- 병렬 처리 불가
- 무결성 검증 용이
- 구현의 복잡성 및 성능 제약으로 거의 사용되지 않음
CFB (Cipher FeedBack)
- 스트림 암호처럼 동작
- 이전 암호문 블록을 암호화, 다음 키 스트림 블록 생성 후 평문과 XOR 연산을 통해 새로운 암호문 생성
- 가변길이 데이터를 패딩 없이 암호화 가능, 비트 단위 가능 (시킬 순 있는데, 메시지 길이로 원본을 추측하지 못하게 하려는 의도로 시키는 것)
- 암호화 시 병렬처리 불가능 (복호화 시 가능)
OFB (Output FeedBack)
- 스트림 암호처럼 동작
- 이전 키 스트림 블록을 암호화하여 다음 키 스트림 생성 후 평문과 XOR 연산 수행
- 가변길이 데이터를 패딩 없이 암호화 가능, 비트 단위 가능 (시킬 순 있는데, 메시지 길이로 원본을 추측하지 못하게 하려는 의도로 시키는 것)
- 병렬 처리 불가
- CFB에 빠른 처리 속도
CTR (Counter)
- 스트림 암호처럼 동작
- Nonce, Counter값을 암호화하여 키 스트림 생성 후 평문과 XOR
- 가변길이 데이터를 패딩 없이 암호화 가능, 비트 단위 가능 (시킬 순 있는데, 메시지 길이로 원본을 추측하지 못하게 하려는 의도로 시키는 것)
- 병렬 처리 가능(높은 성능)
* Nonce는 세션 간 유지되는 값, Counter는 암호화마다 1씩 증가
ECB, CBC, PCBC
- 무조건 패딩
- 키와 플레인텍스트 -> 사이퍼텍스트
- 블록 사이퍼에 키와 플레인텍스트가 들어감
CFB, OFB, CTR
- 패딩을 안해도 됨. 근데 프로토콜마다 시키긴 하는데, 메시지 길이로 추측하지 못하게 하려는 것
- 키와 값이 들어감. 플레인 텍스트가 입력값이 되지 않음. 키 스트림을 만듦.
'소프트웨어 보안개발방법론' 카테고리의 다른 글
공개키(비대칭키) 암호 - Public Key Cryptography (0) | 2025.04.19 |
---|---|
비밀키(대칭키) 암호 - Symmetric Key Cryptography (0) | 2025.04.19 |
암호 - 난수, 비밀키, 공개키, 블록, 스트림 (0) | 2025.04.18 |
CIA, 망분리 (0) | 2025.04.18 |
정보 보안 대응 전략 (0) | 2025.04.18 |