이미 소장하고 있다면 판매해 보세요.
|
|
1부 개요
1장 암호학의 배경 ___1.1 암호학의 역할 ___1.2 가장 약한 연결 고리 속성 ___1.3 대립적 설정 ___1.4 전문가적 편집증 ______1.4.1 광범위한 혜택 ______1.4.2 공격에 대한 토론 ___1.5 위협 모델 ___1.6 암호학≠해결책 ___1.7 어려운 암호학 ___1.8 암호학에서의 쉬운 부분 ___1.9 일반적인 공격 ___1.10 보안과 기타 설계 기준 ______1.10.1 보안과 성능 ______1.10.2 보안과 기능 ______1.10.3 보안과 발전하는 시스템 ___1.11 참조 자료 ___1.12 보안 편집광을 위한 훈련 ______1.12.1 보안 시사 문제 훈련 ______1.12.2 보안성 검토 훈련 ___1.13 연습문제 2장 암호학 소개 ___2.1 암호화 ______2.1.1 커코프 원칙 ___2.2 인증 ___2.3 공개키 암호 ___2.4 전자 서명 ___2.5 공개키 기반 구조 ___2.6 공격 ______2.6.1 암호문 단독 모델 ______2.6.2 알려진 평문 모델 ______2.6.3 선택 평문 모델 ______2.6.4 선택 암호문 모델 ______2.6.5 특정 공격 목표 ______2.6.6 다른 형태의 공격 ___2.7 자세히 살펴보기 ______2.7.1 생일 공격 ______2.7.2 Meet-in-the-Middle 공격 ___2.8 보안 수준 ___2.9 성능 ___2.10 복잡성 ___2.11 연습문제 2부 메시지 보안 3장 블록 암호 ___3.1 블록 암호란 ___3.2 공격 유형 ___3.3 이상적인 블록 암호 ___3.4 블록 암호의 안전에 관한 정의 ______3.4.1 순열 패리티 ___3.5 실제 블록 암호 ______3.5.1 DES ______3.5.2 AES ______3.5.3 Serpent ______3.5.4 Twofish ______3.5.5 기타 AES 최종 후보 ______3.5.6 블록 암호 선택 ______3.5.7 키 크기 ___3.6 연습문제 4장 블록 암호 모드 ___4.1 패딩 ___4.2 ECB ___4.3 CBC ______4.3.1 고정 IV ______4.3.2 카운터 IV ______4.3.3 랜덤 IV ______4.3.4 넌스로 생성된 IV ___4.4 OFB ___4.5 CTR ___4.6 암호화와 인증의 결합 ___4.7 사용할 모드 선택 ___4.8 정보 유출 ______4.8.1 충돌의 확률 ______4.8.2 유출을 다루는 법 ______4.8.3 수학에 관해 ___4.9 연습문제 5장 해시 함수 ___5.1 해시 함수의 안전성 ___5.2 실제 해시 함수 ______5.2.1 간단하지만 안전하지 않은 해시 함수 ______5.2.2 MD5 ______5.2.3 SHA-1 ______5.2.4 SHA-224, SHA-256, SHA-384, SHA-512 ___5.3 해시 함수의 취약점 ______5.3.1 길이 확장 ______5.3.2 부분 메시지 충돌 ___5.4 취약점 개선 ______5.4.1 단기적 개선 방법 ______5.4.2 효율성을 높인 단기 개선 방법 ______5.4.3 다른 개선 방법 ___5.5 해시 함수의 선택 ___5.6 연습문제 6장 메시지 인증 코드 ___6.1 MAC의 역할 ___6.2 이상적인 MAC과 MAC의 안전성 ___6.3 CBC-MAC과 CMAC ___6.4 HMAC ___6.5 GMAC ___6.6 MAC의 선택 ___6.7 MAC의 사용 ___6.8 연습문제 7장 보안 채널 ___7.1 보안 채널의 특성 ______7.1.1 역할 ______7.1.2 키 ______7.1.3 메시지와 스트림 ______7.1.4 보안 속성 ___7.2 인증과 암호화 순서 ___7.3 보안 채널 설계: 개요 ______7.3.1 메시지 번호 ______7.3.2 인증 ______7.3.3 암호화 ______7.3.4 프레임 포맷 ___7.4 설계 세부 사항 ______7.4.1 초기화 ______7.4.2 메시지 전송 ______7.4.3 메시지 수신 ______7.4.4 메시지 순서 ___7.5 대안 ___7.6 연습문제 8장 구현 이슈(1) ___8.1 올바른 프로그램 작성법 ______8.1.1 명세서 ______8.1.2 테스트와 수정 ______8.1.3 태만한 자세 ______8.1.4 진행 방법 ___8.2 안전한 소프트웨어 작성법 ___8.3 기밀 유지 ______8.3.1 상태 삭제 ______8.3.2 스왑 파일 ______8.3.3 캐시 ______8.3.4 메모리 내 데이터 잔존 ______8.3.5 외부 접근 ______8.3.6 데이터 무결성 ______8.3.7 해야 할 일 ___8.4 코드 품질 ______8.4.1 간결화 ______8.4.2 모듈화 ______8.4.3 어서션 ______8.4.4 버퍼 오버플로우 ______8.4.5 테스팅 ___8.5 부채널 공격 ___8.6 다루지 못한 것 ___8.7 연습문제 3부 키 협상 9장 난수 생성 ___9.1 실제 난수 ______9.1.1 실제 난수 데이터 사용 시의 문제점 ______9.1.2 의사 난수 데이터 ______9.1.3 실제 난수 데이터와 의사 난수 생성기 ___9.2 PRNG에 대한 공격 모델 ___9.3 Fortuna ___9.4 생성기 ______9.4.1 초기화 ______9.4.2 Reseed ______9.4.3 블록 생성 ______9.4.4 난수 데이터 생성 ______9.4.5 생성기 속도 ___9.5 누산기 ______9.5.1 엔트로피 소스 ______9.5.2 풀 ______9.5.3 구현 시 고려 사항 ______9.5.4 초기화 ______9.5.5 난수 데이터 얻기 ______9.5.6 이벤트 추가 ___9.6 시드 파일 관리 ______9.6.1 시드 파일 생성 ______9.6.2 시드 파일 업데이트 ______9.6.3 시드 파일 읽기/쓰기 시기 ______9.6.4 백업과 가상 머신 ______9.6.5 파일 시스템 업데이트의 원자성 ______9.6.6 초기 부트 ___9.7 난수 요소의 선택 ___9.8 연습문제 10장 소수 ___10.1 가분성과 소수 ___10.2 작은 소수 생성 ___10.3 모듈로 소수의 계산 ______10.3.1 덧셈과 뺄셈 ______10.3.2 곱셈 ______10.3.3 군과 유한체 ______10.3.4 GCD 알고리즘 ______10.3.5 확장된 유클리드 호제법 ______10.3.6 모듈로 2의 동작 ___10.4 큰 소수 ______10.4.1 소수 판별법 ______10.4.2 멱의 계산 ___10.5 연습문제 11장 디피-헬만 ___11.1 군 ___11.2 기본 DH ___11.3 중간자 공격 ___11.4 함정 ___11.5 안전한 소수 ___11.6 작은 부분군 사용 ___11.7 p의 크기 ___11.8 실용 규칙 ___11.9 잘못될 수 있는 것 ___11.10 연습문제 12장 RSA ___12.1 소개 ___12.2 중국인의 나머지 정리 ______12.2.1 가너의 공식 ______12.2.2 일반화 ______12.2.3 사용 ______12.2.4 결론 ___12.3 모듈로 n 곱셈 ___12.4 RSA 정의 ______12.4.1 RSA 전자 서명 ______12.4.2 공개 지수 ______12.4.3 개인키 ______12.4.4 n의 크기 ______12.4.5 RSA 키 생성 ___12.5 RSA 위험 ___12.6 암호화 ___12.7 전자 서명 ___12.8 연습문제 13장 암호 프로토콜 소개 ___13.1 역할 ___13.2 신뢰 ______13.2.1 위험 ___13.3 인센티브 ___13.4 암호 프로토콜에서의 신뢰 ___13.5 메시지와 단계 ______13.5.1 전송 계층 ______13.5.2 프로토콜과 메시지 식별 ______13.5.3 메시지 인코딩과 구문 분석 ______13.5.4 프로토콜 실행 상태 ______13.5.5 에러 ______13.5.6 재생과 재시도 ___13.6 연습문제 14장 키 협상 ___14.1 설정 ___14.2 첫 번째 시도 ___14.3 프로토콜의 영원한 삶 ___14.4 인증 규칙 ___14.5 두 번째 시도 ___14.6 세 번째 시도 ___14.7 최종 프로토콜 ___14.8 프로토콜의 다양한 관점 ______14.8.1 앨리스의 관점 ______14.8.2 밥의 관점 ______14.8.3 공격자의 관점 ______14.8.4 키 손상 ___14.9 프로토콜의 계산 복잡도 ______14.9.1 최적화 비법 ___14.10 프로토콜 복잡도 ___14.11 가벼운 경고 ___14.12 패스워드 기반의 키 협상 ___14.13 연습문제 15장 구현 이슈(2) ___15.1 큰 정수 연산 ______15.1.1 Wooping ______15.1.2 DH 연산 체크 ______15.1.3 RSA 암호화 체크 ______15.1.4 RSA 서명 체크 ______15.1.5 결론 ___15.2 빠른 곱셈 ___15.3 부채널 공격 ______15.3.1 대응 방법 ___15.4 프로토콜 ______15.4.1 보안 채널상의 프로토콜 ______15.4.2 메시지 수신 ______15.4.3 타임아웃 ___15.5 연습문제 4부 키 관리 16장 클록 ___16.1 클록 사용 ______16.1.1 만료 ______16.1.2 특정 값 ______16.1.3 단조성 ______16.1.4 실시간 트랜잭션 ___16.2 실시간 클록 칩 사용 ___16.3 보안 위험 ______16.3.1 클록 되돌리기 공격 ______16.3.2 클록 중지하기 공격 ______16.3.3 클록 앞으로 돌리기 공격 ___16.4 신뢰성 있는 클록 생성 ___16.5 동일 상태 문제 ___16.6 시간 ___16.7 마무리 추천 ___16.8 연습문제 17장 키 서버 ___17.1 기본 원리 ___17.2 커버로스 ___17.3 간단한 해결책 ______17.3.1 보안 연결 ______17.3.2 키 설정 ______17.3.3 키 재설정 ______17.3.4 기타 속성 ___17.4 선택의 문제 ___17.5 연습문제 18장 이상적인 PKI ___18.1 PKI의 간단한 개요 ___18.2 PKI 예제 ______18.2.1 범용 PKI ______18.2.2 VPN 접근 ______18.2.3 전자 금융 ______18.2.4 정유 센서 ______18.2.5 신용카드 조직 ___18.3 추가적인 세부 사항 ______18.3.1 다단계 인증 ______18.3.2 유효 기간 ______18.3.3 독립된 등록 권한 ___18.4 정리 ___18.5 연습문제 19장 PKI의 현실 ___19.1 이름 ___19.2 인가 ___19.3 신뢰 ___19.4 간접 인가 ___19.5 직접 인가 ___19.6 자격 증명 시스템 ___19.7 수정된 구상 ___19.8 폐기 ______19.8.1 인증서 폐기 목록 ______19.8.2 빠른 만료 ______19.8.3 온라인 인증서 검증 ______19.8.4 인증서 폐기의 필요성 ___19.9 PKI를 사용하기 좋은 곳 ___19.10 PKI 타입과 키 서버 타입 ___19.11 연습문제 20장 PKI 실현 가능성 ___20.1 인증서 형식 ______20.1.1 권한 언어 ______20.1.2 루트 키 ___20.2 키의 생명주기 ___20.3 키의 교체 이유 ___20.4 정리 ___20.5 연습문제 21장 비밀 정보 저장 ___21.1 디스크 ___21.2 인간의 기억 ______21.2.1 솔트 사용과 확장 ___21.3 이동식 저장 매체 ___21.4 보안 토큰 ___21.5 보안 UI ___21.6 바이오메트릭 ___21.7 싱글 사인온 ___21.8 손실 위험 ___21.9 비밀 공유 ___21.10 비밀 삭제 ______21.10.1 종이 ______21.10.2 자성 매체 ______21.10.3 고체 상태의 저장 장치 ___21.11 연습문제 5부 기타 22장 표준과 특허 ___22.1 표준 ______22.1.1 표준화 과정 ______22.1.2 SSL ______22.1.3 AES: 경쟁에 의한 표준화 ___22.2 특허 23장 전문가 고급 활용 |
|
대부분의 서적은 암호화가 무엇인지, 암호학적 설계의 발전 방향이나 SSL/TLS 같은 기존 암호화 프로토콜의 방법을 다룬다. 브루스 슈나이어(Bruce Schneier)가 집필했던 『Applied Cryptography』도 그랬다. 이런 책은 암호 분야에 종사하는 사람들에게 귀중한 참고 자료가 된다. 그러나 안타깝게도 실제 암호 기술자나 보안 기술자에게는 큰 도움이 되지 못하며, 보안 실무자들에게는 암호 프로토콜의 동작 원리보다 사용 방법을 알려줄 필요가 있다.
우선 암호 사용 방법을 암호학자처럼 생각해야만 한다. 이 책은 이런 목표를 이루는 데 도움을 주기 위해 작성했으므로 집중해서 읽기 바란다. 암호학에서 사용하는 다양한 프로토콜보다 특정 프로토콜의 설계와 분석을 세밀하게 살펴볼 것이다. 또한 암호 프로토콜을 설계해가는 방법을 함께 차근히 알아본다. 여러 사람과 함께 특정한 설계를 결정한 이유를 공유하고, 그에 따른 잠재적인 문제점을 지적한다. 암호학자처럼 생각해봄으로써 암호화 기법을 좀 더 현명하게 사용하는 방법을 배운다. 기존 암호 도구들을 살펴보고 핵심 기능을 이해하고 사용 방법을 익히게 된다. 그리고 암호와 관련된 문제점을 이해하고 잘 극복해나갈 수 있을 것이다. 또한 이 책은 컴퓨터 보안을 학습하는 데 관문 역할을 할 것이다. 컴퓨터 보안은 여러모로 암호의 상위 집합이다. 컴퓨터 보안과 암호는 모두 공격자가 있을 경우 특정 방식으로 행동하는 개체(시스템 또는 알고리즘)들을 설계하고 평가하는 것이다. 이 책은 암호학의 맥락에서 공격자에 대해 생각하는 방법을 알려준다. ---저자 서문 중에서 정보통신 기술이 고도로 발전하면서 점차 IT가 융합되고 대부분 산업 분야에 복합적인 정보통신 기술이 활용되는 추세다. 이와 비례해 정보보호의 중요성은 점차 커지고 IT에 종사하는 전문가는 물론 인증서 등 디지털 데이터로서 개인 정보를 다루는 일반인들에 이르기까지 정보보호에 관심이 많다. 정보보호는 이제 정보통신 기술뿐만 아니라 정보통신과 타 산업 간의 융합 기술에 이르기까지 IT를 활용한 모든 곳에서 중요한 위치를 차지한다. 신문과 뉴스 등 대중 매체에서 디도스(DDoS), 악성 코드 같은 보안 용어를 어렵지 않게 접할 수 있음은 정보보호의 위상이 점차 높아지는 증거라고 봐도 무방할 것이다. 이 책 『실용 암호학』은 원서의 제목인 『Cryptography Engineering』에서 알 수 있듯 암호 전반에 관해 단순 이론가의 입장보다는 공학자의 입장에서 알기 쉽게 다룬다. 지금까지 암호학을 다룬 많은 서적이 암호학의 역사적 흐름과 이론적 배경을 중심으로 전개했다면, 이 책은 현재 사용하는 실용 암호에 직접 접근하는 방식을 택했다. 설명 방식 역시 이론적 배경만을 심도 있게 파헤치기보다는 실제 암호 시스템이 어떻게 동작하는지를 알려주는 데 초점을 맞췄기 때문에 수학적 배경 지식이나 암호 이론에 지식이 깊지 않은 독자라도 어렵지 않게 이해할 수 있다. 이론을 깊게 공부하고자 하는 독자에게는 암호 시스템의 전체적인 구성을 살피는 데 도움이 될 것이고, 암호에 대해 실무적으로 접근하고자 하는 독자에게는 이론과 응용을 균형 있게 익히는 데 도움을 줄 수 있을 것이다. ---옮긴이의 말 중에서 |