로그인회원가입장바구니고객센터마이페이지회사소개
kangcom
전체
Home >   >   > 

암호 해킹으로 배우는 파이썬의 기초

   
지은이 알 스웨이가트   |   출판사 에이콘  |   발행일 2019년 07월 31일
 
클릭하시면 큰 도서이미지를 보실 수 있습니다.
판매가 35,000원31,500원 10%
마일리지 5% 1,750원
발행일 2019-07-31
ISBN 1161753486 | 9791161753485
기타정보 번역서 | 544쪽
예상출고일 2~3일 이내 (근무일기준)
배송비 무료배송
   
프로그래밍언어
   
이 책의 원서
  Cracking Codes with Python: An Introduction to Building and Breaking Ciphers
NO STARCH PRESS | Al Sweigart
 

★ 요약 ★



암호 해킹과 파이썬 코딩을 모두 맨땅에서 시작하는 책이다. 암호학도 파이썬도 모르는 사람뿐만 아니라, 프로그래밍 경험이 거의 없는 사람도 볼 수 있는 책이다. 그러나 이 책은 프로그래밍의 기초에만 머무르지만은 않는다. 후반에서는 현대 암호학의 정수인 공개 키 기반 암호까지 다룬다. 암호학과 파이썬을 학습하는 과정을 지루하지도 가파르지도 않게 구성한 훌륭한 안내서다.





★ 이 책에서 다루는 내용 ★



■ 실제 동작하는 프로그램에 있는 루프, 변수, 흐름 제어 구문 결합

■ 복호화한 메시지가 올바른 영어인지 무작위 문자열인지 바로 검출할 수 있는 사전 파일 사용

■ 암호화/복호화 코드가 올바르게 동작하는지 검증할 수 있는 테스트 프로그램 작성

■ 모듈러 연산으로 메시지를 암호화하는 아핀 암호화/해킹 코드 예제

■ 무차별 대입법, 빈도 분석 등의 암호 해킹 기법





★ 이 책의 대상 독자 ★



암호화, 해킹 또는 암호에 대해 궁금한 독자들을 대상으로 하는 책이다. 이 책의 암호(23장과 24장에서 다루는 ‘공개 키 암호’는 제외)는 이미 수 세기 전에 작성됐지만 요즘에는 그와 같은 암호를 해킹할 수 있는 연산 능력을 모든 컴퓨터가 보유하고 있다. 현대의 조직이나 개인은 더 이상 그런 암호를 사용하지는 않지만, 이를 학습해 암호 작성의 기초를 알 수 있고 해커가 암호의 취약점을 이용해 복호화해내는 원리를 학습할 수 있다.

이 책은 프로그래밍을 해본 적이 없는 독자들을 위한 책으로, 우선 초보자를 위한 최고의 언어 중 하나인 파이썬 언어로 기본 프로그래밍 개념을 학습한다.





★ 이 책의 구성 ★



초반에는 기본적인 파이썬과 암호 개념을 소개한다. 그다음부터는 일반적인 암호용 프로그램을 설명하고 암호를 해킹하는 프로그램을 설명하는 내용이 번갈아 등장한다. 각 장은 학습한 내용을 복습하는 데 도움이 될 만한 연습 문제를 포함하고 있다.



1장, ‘종이 암호화 도구 만들기’에서는 컴퓨터가 등장하기 전에 암호화를 수행한 방법을 보여주는 간단한 종이 도구를 소개한다.

2장, ‘대화형 셸 프로그래밍’에서는 파이썬의 대화형 셸을 사용해 코드를 한 번에 한 행씩 실행하는 방법을 설명한다.

3장, ‘문자열과 프로그램 작성’에서는 전체적인 프로그램 작성법과 이 책의 모든 프로그램에서 사용한 문자열 데이터 유형을 다룬다.

4장, ‘뒤집기 암호’에서는 첫 번째 암호를 구현하기 위한 간단한 프로그램 작성법을 다룬다.

5장, ‘카이사르 암호’에서는 수천 년 전에 최초로 발명된 기본 암호를 설명한다.

6장, ‘무차별 대입법으로 카이사르 암호 해킹하기’에서는 무차별 대입 해킹 기법과 암호화 키 없이 메시지를 해독하는 방법을 설명한다.

7장, ‘전치 암호’에서는 전치 암호화와 그를 통해 메시지를 암호화하는 프로그램을 다룬다.

8장, ‘전치 암호 복호화’에서는 전치 암호화의 남은 부분 즉, 키로 메시지를 해독하는 방법에 대해 설명한다.

9장, ‘테스트 프로그램 작성법’에서는 프로그램을 테스트하는 프로그래밍 기법을 소개한다.

10장, ‘파일 암호화 및 복호화’에서는 하드 드라이브에서 파일을 읽거나 쓰는 프로그램을 작성하는 방법을 다룬다.

11장, ‘영어 문장 감지 프로그램’에서는 프로그램을 통해서 영어 문장을 감지할 수 있는 방법을 소개한다.

12장, ‘전치 암호 해킹’에서는 이전 장의 개념을 결합해 전치 암호를 해킹해본다.

13장, ‘아핀 암호를 구현하기 위한 모듈러 연산 모듈’에서는 아핀(Affine) 암호의 수학적 개념을 설명한다.

14장, ‘아핀 암호 프로그래밍’에서는 아핀 암호 프로그램을 작성하는 방법을 다룬다.

15장, ‘아핀 암호 해킹’에서는 아핀 암호 해킹 프로그램을 작성하는 법을 다룬다.

16장, ‘단순 치환 암호 프로그래밍’에서는 간단한 치환 암호를 이용한 암호화 프로그램 작성 방법을 다룬다.

17장, ‘단순 치환 암호 해킹’에서는 단순 치환 암호를 해킹하는 프로그램 작성 방법을 다룬다.

18장, ‘비즈네르 암호 프로그래밍’에서는 좀 더 복잡한 치환 암호인 비즈네르(Vigenère) 암호 프로그램을 다룬다.

19장, ‘빈도 분석’은 영어 단어의 구조와 그것을 이용한 비즈네르 암호 해킹을 고찰해본다.

20장, ‘비즈네르 암호 해킹’에서는 비즈네르 암호를 해킹하는 프로그램을 다룬다.

21장, ‘일회용 암호’에서는 일회용 암호와 해킹이 수학적으로 불가능한 이유를 설명한다.

22장, ‘소수 찾기 및 생성’에서는 숫자가 소수인지 빠르게 판단하는 프로그램을 작성하는 방법을 다룬다.

23장, ‘공개 키 암호를 위한 키 생성’에서는 공개 키 암호화와 공개 및 개인 키를 생성하는 프로그램을 작성하는 방법을 다룬다.

24장, ‘공개 키 암호 프로그래밍’에서는 단순한 노트북 컴퓨터로는 해킹할 수 없는 공개 키 암호 프로그램을 작성하는 방법을 다룬다.

부록 ‘파이썬 코드 디버깅’에서는 IDLE의 디버거로 프로그램의 버그를 찾고 잡는 방법을 다룬다.



★ 지은이의 말 ★



1990년대 초반에는 RSA 암호의 일부를 구현하는 23장, ‘공개 키 암호를 위한 키 생성‘의 내용을 미국 밖으로 수출하는 것은 불법이었다. RSA로 암호화된 메시지는 해킹이 불가능하기 때문에 RSA와 같은 암호화 소프트웨어의 수출은 국가 보안 문제로 간주돼 국무부의 승인이 필요했다. 실제로 강력한 암호화 기술은 탱크, 미사일, 화염 방사기와 같은 수준의 규제를 받았다. 1990년 캘리포니아대학교 버클리캠퍼스의 대니얼 번스타인(Daniel J. Bernstein)은 자신의 스너플(Snuffle) 암호화 시스템의 소스 코드를 담은 학술 논문을 발표하려고 한 적이 있다. 그러나 미국 정부는 소스 코드를 인터넷에 올리려면 무기 판매상 면허를 먼저 취득해야 할 것이라고 통보했다. 또한 그의 기술이 너무 안전하기 때문에 그가 단 하나라도 허가를 요청한다면 수출 허가를 거부할 것이라고 말했다.

젊은 디지털 시민 자유 조직 전자프런티어재단(Electronic Frontier Foundation)은 번스타인과 미국의 대결에 있어서 번스타인 측을 대표했다. 처음에는 법원이 작성된 소프트웨어 코드가 헌법 수정 제1조에 의해 보호되는 언어이며 암호화에 대한 수출 통제법이 수정 헌법 제1조의 권리에 의해 번스타인의 권리를 침해한다는 판결을 내렸다.

이제 강력한 암호화 기술은 세계 경제의 상당 부분을 차지하고 있으며, 매일 수백만 명의 인터넷 쇼핑객이 사용하는 비즈니스 및 전자 상거래 사이트를 보호하고 있다. 암호화 소프트웨어가 중대한 국가 안보 위협이 될 것이라는 정보기관의 전망은 근거가 없었다.

그러나 1990년대와 마찬가지로 이 지식을 자유롭게 전파하면 (이 책과 마찬가지로) 무기 판매상들과 같은 취급을 받으며 감옥에 수감될 것이다. 암호화 기술 해방의 법적 전쟁에 대한 자세한 내용은 스티븐 레비(Steven Levy)의 책 『Crypto』(Penguin, 2001)을 참고하길 바란다.

1장. 종이 암호화 도구 만들기

__암호화란 무엇인가?

__코드 대 암호

__카이사르 암호

__이중 암호화가 동작하지 않는 이유

__요약





2장. 대화형 셸 프로그래밍

__간단한 수학 표현식 몇 가지

__변수에 값 저장하기

__요약





3장. 문자열과 프로그램 작성

__문자열 값으로 텍스트 다루기

__print() 함수로 값 출력하기

__이스케이프 문자 출력

__작은 따옴표와 큰 따옴표

__IDLE의 파일 편집기로 프로그램 작성하기

__“Hello, World!” 프로그램 소스코드

__온라인 Diff 도구로 소스코드 확인하기

__IDLE에서 작성한 프로그램을 나중에 다시 보려면

__“Hello, World!” 프로그램은 어떻게 동작하나

__요약





4장. 뒤집기 암호

__뒤집기 암호 프로그램 소스코드

__뒤집기 암호 프로그램의 실행 예제

__주석과 변수 설정하기

__문자열 길이 알아내기

__while 루프 개요

__input() 프롬프트로 프로그램 개선하기

__요약





5장. 카이사르 암호

__카이사르 암호화 프로그램 소스코드

__카이사르 암호 프로그램 예제 실행

__모듈 가져오기와 변수 설정

__상수와 변수

__for 루프 구문

__if 구문

__In과 not in 연산자

__find() 문자열 메소드

__symbol 암호화/복호화

__화면에 표시하고 translated 복사하기

__다른 심볼도 암호화해보자

__요약





6장. 무차별 대입법으로 카이사르 암호 해킹하기

__카이사르 암호 해킹 프로그램의 소스코드

__카이사르 암호 해킹 프로그램의 실행 예제

__변수 설정

__range() 함수를 이용한 순환문

__message 복호화

__문자열 포맷팅을 이용해 key와 복호화된 message 출력하기

__요약





7장. 전치 암호

__전치 암호의 동작 원리

__전치 암호 프로그램 소스코드

__전치 암호 프로그램 예제 실행

__def문으로 자신만의 함수 만들기

__아규먼트로 키와 메시지 전달하기

__리스트 데이터 유형

__전치 암호 알고리즘

__대입 연산자의 확장

__message를 currentIndex로 돌아다니기

__join() 문자열 메소드

__리턴 값과 return 구문

__변수 __name__

__요약





8장. 전치암호 복호화

__전치 암호를 종이로 해독하는 방법

__전치 암호 복호화 프로그램 소스코드

__전치 암호 복호화 프로그램의 실행 예제

__모듈 가져오기와 main() 함수 설정하기

__message를 key로 복호화하기

__main() 함수 호출

__요약





9장. 테스트 프로그램 작성법

__전치 암호 테스트 프로그램의 소스코드

__전치 암호 테스트 프로그램 실행 예제

__모듈 가져오기

__의사 난수 생성하기

__무작위 문자열 만들기

__다양한 message 테스트하기

__암호화가 제대로 동작했는지 확인하고 프로그램 끝내기

__main() 함수 호출

__테스트 프로그램 테스트하기

__요약





10장. 파일 암호화 및 복호화

__평문 파일

__전치 파일 암호 프로그램의 소스코드

__전치 파일 암호 프로그램 실행 예제

__파일 작업하기

__main() 함수 지정

__파일이 존재하는지 알아보기

__문자열 메소드로 더욱 유연한 사용자 입력 만들기

__입력 파일 읽기

__암호화/복호화에 걸린 소요 시간 측정

__출력 파일 쓰기

__main() 함수 호출

__요약





11장. 영어 문장 감지 프로그램

__어떻게 컴퓨터로 영어를 이해할 수 있을까?

__detectEnglish 모듈의 소스코드

__detectEnglish를 사용한 예제

__코드 도입부와 상수 설정

__딕셔너리 데이터 유형

__사전 파일 구현

__message에 들어 있는 영어 단어 수 세기

__영문자가 아닌 글자 제거하기

__영어 단어 판정

__요약



12장. 전치 암호 해킹

__전치 암호 해킹 프로그램의 소스코드

__전치 암호 해킹 프로그램의 실행 예제

__모듈 가져오기

__삼중 따옴표로 여러 줄의 문자열 처리하기

__해킹된 메시지 출력하기

__해킹된 메시지 얻기

__main() 함수 호출

__요약





13장. 아핀 암호를 구현하기 위한 모듈러 연산 모듈

__나머지 연산

__나머지 연산자

__최대공약수를 계산하기 위한 인수 찾기

__복수 할당문

__GCD를 찾는 유클리드 알고리즘

__곱셈 암호와 아핀 암호의 동작 원리 이해하기

__Cryptomath 모듈 소스코드

__요약





14장. 아핀 암호 프로그래밍

__아핀 암호 프로그램의 소스코드

__아핀 암호 프로그램 실행 예제

__모듈, 상수, main() 함수 설정

__키 계산과 유효성 검증

__암호화 함수 작성

__복호화 함수 작성

__임의의 키 생성하기

__main() 함수 호출

__요약





15장. 아핀 암호 해킹

__아핀 암호 해킹 프로그램의 소스코드

__아핀 암호 해킹 프로그램의 실행 예제

__모듈, 상수, main() 함수 설정

__아핀 암호 해킹 함수

__main() 함수 호출

__요약





16장. 단순 치환 암호 프로그래밍

__치환 암호의 동작 원리

__단순 치환 암호 프로그램 소스코드

__단순 치환 암호의 실행 예제

__모듈, 상수, main() 함수 설정

__sort() 리스트 메소드

__래퍼(wrapper) 함수

__The translateMessage() Function

__임의의 키 생성하기

__main() 함수 호출

__요약





17장. 단순 치환 암호 해킹

__단어 패턴에 의한 복호화

__해킹 과정 미리보기

__단어 패턴 모듈

__단순 치환 암호 해킹 프로그램의 소스코드

__단순 치환 암호 해킹 프로그램의 실행 예제

__모듈과 상수 설정

__정규표현식으로 글자 찾기

__main() 함수 설정

__사용자에게 해킹 결과 표시하기

__암호 글자 매핑 생성하기

__hackSimpleSub() 함수

__main() 함수 호출

__요약





18장. 비즈네르 암호 프로그래밍

__비즈네르 암호의 다중 글자 키 사용

__비즈네르 암호 프로그램의 소스코드

__비즈네르 암호 프로그램의 실행 예제

__모듈, 상수, main() 함수 설정

__List-Append-Join 처리에 의한 문자열 구축

__메시지 암호화/복호화

__main() 함수 호출

__요약





19장. 빈도 분석

__텍스트의 글자 빈도 분석하기

__글자 빈도 일치시키기

__글자 빈도 일치 소스코드

__ETAOIN 순서로 글자를 저장하기

__message의 글자 수 세기

__튜플의 첫 번째 요소 얻기

__message의 글자들을 빈도순으로 정렬하기

__message의 빈도 일치 점수 계산하기

__요약





20장. 비즈네르 암호 해킹

__무차별 대입 사전 공격을 이용한 비즈네르 암호 해킹

__비즈네르 사전 공격 프로그램의 소스코드

__비즈네르 사전 해킹 프로그램 실행 예제

__비즈네르 사전 해킹 프로그램 설명

__카시스키 분석을 통한 키 길이 찾기

__비즈네르 해킹 프로그램의 소스코드

__비즈네르 해킹 프로그램의 실행 예제

__모듈 Import와 main() 함수 설정

__반복 문자열 찾기

__간격 값의 약수 구하기

__가장 가능성이 높은 키 길이 찾기

__같은 하위 키로 암호화한 글자 찾기

__후보 키 길이를 이용한 복호화 시도

__해킹한 메시지 리턴

__main() 함수 호출

__해킹 프로그램 상수 값 변경하기

__요약





21장. 일회용 암호

__해킹이 불가능한 일회용 암호

__요약





22장. 소수 찾기 및 생성

__소수란 무엇인가?

__소수 모듈의 소스코드

__소수 찾기 모듈의 실행 예제

__나눗셈에 의한 소수 판정 알고리즘의 원리

__나눗셈 알고리즘을 이용한 소수 검사의 구현

__에라토스테네스의 체

__에라토스테네스의 체로 소수 만들기

__라빈 밀러 소수 알고리즘

__큰 소수 찾기

__큰 소수 생성하기

__요약





23장. 공개 키 암호를 위한 키 생성

__공개 키 암호

__인증 문제

__디지털 서명

__공개 키와 개인 키의 생성 과정

__공개 키 생성 프로그램 소스코드

__공개 키 생성 프로그램의 실행 예제

__main() 함수 생성

__generateKey() 함수로 키 생성하기

__makeKeyFiles() 함수로 키 파일 생성하기

__main() 함수 호출

__하이브리드 암호 시스템

__요약





24장. 공개 키 암호 프로그래밍

__공개 키 암호의 동작 원리

__공개 키 암호 프로그램의 소스코드

__공개 키 암호 프로그램의 실행 예제

__프로그램 기초 설정

__암호화/복호화 모드 설정

__getBlocksFromText() 로 문자열을 블록으로 변환하기

__복호화 함수 getTextFromBlocks() 사용하기

__encryptMessage() 함수 작성

__decryptMessage() 함수 작성


...
알 스웨이가트(Al Sweigart)

소프트웨어 개발자이자 기술서 저자로 활동 중이며 샌프란시스코에 살고 있다. 가장 좋아하는 프로그래밍 언어는 파이썬이며 몇몇 파이썬 오픈소스 모듈의 개발자다. 저술한 다른 책들은 웹사이트(https://inventwithpython.com/)에서 크리에이티브 커먼즈 라이선스로 자유롭게 사용할 수 있다. 키우고 있는 고양이의 체중은 12파운드다.





★ 옮긴이의 말 ★



이 책은 꽤 독특하다. 암호 해킹과 파이썬 코딩을 모두 맨땅에서 시작한다. 즉, 암호학도 파이썬 코딩도 모르는, 심지어 프로그래밍 경험이 거의 없는 사람도 볼 수 있는 책이라는 뜻이다. 그러나 프로그래밍의 기초에만 머무르지만은 않는다. 책의 후반에서는 현대 암호학의 정수인 공개 키 기반 암호까지 다룬다. 암호학과 파이썬을 학습하는 과정을 지루하지도 가파르지도 않게 구성한 훌륭한 안내서이다.

어떤 프로그래밍 언어를 배우는 가장 좋은 방법은 특정 분야의 소프트웨어를 직접 개발해보는 것이다. 간단히 ‘Hello World’를 찍는 것, 프로그래밍 패턴을 공부하는 것을 넘어서 자신이 직접 쓰기 위한 소프트웨어를 개발해 보는 것이 언어를 익히는 지름길이다.

저자 알 스웨이가트의 이력을 보면 그는 훌륭한 파이썬 선생님인 동시에 훌륭한 파이썬 개발자다. 파이썬을 알파부터 오메가까지 점증적으로 안내하기보다는 소프트웨어 개발의 여정에 따라 요구되는 언어의 특징과 기능을 가르치는 방식을 선호한다. 이 책 역시 암호 해킹이라는 문제를 해결해 가는 여정을 통해 파이썬을 즐기고 익힐 수 있도록 구성하고 있다.

파이썬은 최근 주목받는 인공지능/빅데이터를 중심으로 사용자층이 급성장하고 있는 언어다. 또한 웹 애플리케이션을 비롯해 광범위한 영역에서 사용되고 있다. 파이썬 자체로도 많이 쓰이고 두 개 이상의 언어를 복합적으로 사용하는 폴리글랏 개발에서도 가장 사용성이 좋은 언어다. 또한 파이썬은 사용 수준에 맞게 저마다의 깊이가 있는 언어다. 기본 기능만으로도 복잡한 문제를 해결하는 개발자도 있고, 파이썬의 숨겨진 저수준 기능부터 복잡한 프레임워크까지 사용하는 개발자도 있다. 객체지향으로 개발하는 개발자도 있고 절차적 또는 원시적인 스크립트 수준을 선호하는 개발자도 있다. 파이썬답게(pythonic) 파이썬을 사용하는 개발자가 있는 반면 익숙한 C나 JAVA 방식으로 개발하는 개발자도 있다. 특이한 것은 개발 철학이나 방법론, 파이썬에 대한 지식 수준이 서로 달라도 각자의 방식으로 프로페셔널이 될 수 있다는 것이다. 나는 이것이 파이썬의 가장 큰 매력이라고 생각한다.

이 책을 마쳤을 때 얻게 될 파이썬 지식은 이제 막 기초를 탈출한 수준일 것이다. 그러나 거의 무엇이든 만들 수 있는 수준이기도 하다. 공개 키 암호를 만들 수 있는 것이다. https로 시작하는 웹페이지 통신과 공인인증서에서 쓰는 바로 그 기술이다. 한편으로 공개 키 암호를 이해했다는 것은 현대 암호학의 많은 부분을 이해했다는 뜻이기도 하다. 이 책은 파이썬에 이미 익숙한 독자에게도 유용하다. 파이썬 경험이 있는 독자는 이 책을 통해 빠른 속도로 암호학에 대한 지식을 독파해낼 수 있다.

그럼 즐거운 여정이 되기를!





★ 옮긴이 소개 ★



신진철

아주대학교에서 기계공학을 전공했으며, 한양대학교 전자공학 대학원을 졸업했다. 어울림 정보기술, 삼성 소프트웨어 멤버십, 삼성전자를 거쳐 현재는 SK플래닛에서 고성능 웹서빙과 데이터 관련 업무를 하고 있다. 주로 임베디드, OS, 시스템 프로그래밍 경험을 쌓았고 고성능 컴퓨팅 연구가 관심사다.

등록된 서평이 없습니다.
이펙티브 자바스크립트...
데이비드 허먼
선택된 상품을 찜하실 수 있습니다. 선택된 상품을 바로구매 하실 수 있습니다.
자바 병렬 프로그래밍...
David Holmes
선택된 상품을 찜하실 수 있습니다. 선택된 상품을 바로구매 하실 수 있습니다.
C언어 스케치...
강환수, 이동규, 최재순
선택된 상품을 찜하실 수 있습니다. 선택된 상품을 바로구매 하실 수 있습니다.
커트 건서로...
 
전체평균(0)
회원평점   회원서평수 0
알 스웨이가트 의 최근 저서
 
파이썬 프로그래밍으로 지루한 작업 자동화하기
27,000원
(10%↓+5%)
 
에이콘 출판사의 신간
보안 빅데이터 분석 플랫폼 구축과 활용
김대용 저
31,500원
(10%↓+5%)
 
자바 데이터 분석
존 R. 허바드 [옮긴이] 김명훈 저
31,500원
(10%↓+5%)
 
Functional Programming in C++
이반 추키츠 [옮긴이]김점갑 저
31,500원
(10%↓+5%)
 
스프링 부트 2 레시피
마틴 데이넘 [옮긴이]최정호, 임진욱, 김명훈 저
27,000원
(10%↓+5%)
 
해킹 입문자를 위한 TCP/IP 이론과 보안 2/e
오동진 저
22,500원
(10%↓+5%)
 
이메일주소수집거부