일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- javap
- 취약점
- Transition
- HelloWorld
- 심리학
- 여행계획
- IMPLEMENT
- ㅇ
- 보안
- 치유
- bytecode
- 일상회피
- throws
- bytecode 분석
- opcode
- 버킷리스트
- 심리여행
- 회피
- Recylcer
- Android
- Navigation Component
- abstract
- jvm
- 일상탈출
- 여행
- Shared Elements
- static
- 보안취약점
- extends
- Interface
Archives
- Today
- Total
패스트터틀
소프트웨어 최적화(블록 암호 구현) 본문
일반적인 코드
1. 성능 최적화 기법
- 함수 사용 최소화(인라인 함수사용, 매크로사용)
- Loop unrolling
- 인라인 어셈블리
2. 코드 크기 최적화 기법
- 중복 코드 최소화(함수구현)
블록암호 코드 구현
1. 성능 최적화 기법
- 라운드 키 미리 생성
- 함수 구현 지양(인라인 함수 구현, 매크로 구현)
- 테이블 참조 구현(AES S-Box, MixColumns)
- Loop unrolling(모든 라운드를 풀어서 구현)
- 인라인 어셈블리 사용(레지스터 효율적 사용, Rotation 연상 등 최적화)
2. 코드 크기 최적화 기법
- 라운드 키 on-the-fly 생성
- 함수 구현 지향(1라운드 단위 구현, 전체 라운드 수만큼 반복, 공통 사용 모듈 함수 구현)
라운드 키 생성 방식
- 전체 라운드 키 미리생성
: 전체 라운드 키를 저장할 메모리 공간 필요
암호화/복호화 시 라운드 키 생성과정이 생략되어 빠른 수행 가능
메모리 공간이 충분하고 대용량의 데이터를 고속으로 처리하기 위한 PC, 서버 환경에 적합
- 라운드별 on the fly 생성
: 한 라운드에 사용할 라운드 키를 저장할 메모리 공간만 필요
암호화/복호화 과정에서 라운드 키를 생성
프로그래밍 언어 수준 선택
- 고수준언어는 코드 작성과 이해가 쉽지만 컴파일러 및 컴파일 옵션에 의해 성능이 좌우되지만 높은이식성이있다
- 저수준언어는 코드 장석과 이해가 어렵지만 컴파일러로 생성된 코드보다 크기 및 실행 속도 면에서 이점이 있다고수준언어와 반대로 하지만 이식성이 낮다.
함수구현
inline 함수,매크로
- 컴파일러에 의해 함수 호출 부분이 함수 구현부로 치환됨
- 함수 호출 오버헤드가 없어 속도가 빠름
- 같은 코드가 반복되게 되므로 코드 크기는 증가함
함수
- 함수를 호출하면 program counter가 함수 구현부로 이동
- 함수 호출 오버헤드가 발생하여 속도 저하가 있음
- 중복된 코드를 최소화하여 코드 크기를 감소시킬 수 있음
저비용 연산자 선택
%, /, * --> &, >>, << 로 바꿔서 사용하면 더 빨리 가볍게 가능함
Loop unrolling
인라인 어셈블리
AVR 레지스터 맵
'Cyber Security(undergraduate) > cryptography' 카테고리의 다른 글
아두이노와 암호화 (0) | 2019.04.17 |
---|
Comments