코드북 암호(Codebook Cipher)는 암호학에서 사용되는 대표적인 암호 방식 중 하나로, 사전에 정의된 코드북을 이용하여 평문을 암호문으로 변환하거나 암호문을 평문으로 복원하는 방식을 가리킨다. 코드북이란 원래 문자 그대로 '코드(부호)가 수록된 책'이라는 의미로, 평문의 단어나 구절(phrase)과 이를 대체하는 코드워드(code word) 또는 숫자 문자열을 대응시켜 나열한 조회표(lookup table)의 형태를 띤다.
암호학에서 코드북은 코드(code)를 구현하는 데 사용되는 문서이다. 각 단어나 구절마다 이를 대체할 하나 또는 그 이상의 문자열이 대응되며, 암호문을 해독하기 위해서는 송신자와 수신자 양쪽 모두 동일한 코드북의 사본을 보유해야 한다. 코드북의 배포와 물리적 보안 확보는 일반적인 암호 키에 비해 상대적으로 큰 어려움이 뒤따르는데, 이는 코드북 자체가 암호 키보다 훨씬 방대한 정보량을 지니기 때문이다.
코드북은 구조에 따라 단부 코드(one-part code)와 이부 코드(two-part code)로 구분된다. 단부 코드에서는 평문의 단어·구절과 이에 대응하는 코드워드가 동일한 알파벳 순서로 배열되어 일반 사전과 유사한 형태를 이룬다. 이 경우 코드북의 크기는 이부 코드의 절반에 불과하지만, 일부 코드워드의 의미가 노출되었을 때 인접한 코드워드의 의미를 추론당할 위험이 크다는 보안상 취약점이 있다. 이부 코드는 평문을 암호문으로 변환하는 부분과 반대로 암호문을 평문으로 복원하는 부분이 분리되어 있으며, 언어 번역 사전과 유사하게 구성된다.
역사적으로 코드북 시스템의 가장 오래된 사례로는 1379년 반(反)교황 클레멘스 7세(Antipope Clement VII)를 위해 일했던 가브리엘 데 라빈드(Gabriele de Lavinde)의 사용례가 알려져 있다. 이부 코드book의 사례는 적어도 1800년대의 앙투안 로시뇰(Antoine Rossignol) 시기까지 거슬러 올라간다. 15세기부터 19세기 중반까지는 노멘클레이터(nomenclator)가 가장 널리 쓰인 암호 방식이었으며, 슈퍼암호화(superencryption) 기법이 적용된 코드북은 제1차 세계 대전 당시 가장 널리 사용된 암호 방식이었다. 제2차 세계 대전 당시 일본 해군이 사용한 JN-25 코드는 약 3만 개의 코드 그룹으로 이루어진 코드북에 3만 개의 무작위 가산값을 슈퍼암호화 방식으로 적용한 대표적 사례로 알려져 있다.
미국 국가안보국(NSA)의 문헌에서는 때때로 코드북이라는 용어를 블록 암호(block cipher)를 지칭하는 의미로 사용하기도 한다. 또한 현대의 통신 기술에서는 프리코딩(precoding)과 빔포밍(beamforming)에서 사용되는 프리코딩 벡터 및 행렬의 집합을 가리키는 용어로도 쓰이며, 이는 3GPP에서 5G 및 LTE 표준의 일부로 규격화되어 있다.
책 암호(book cipher)나 러닝 키 암호(running key cipher)에서 사용되는 공유 서적은 송·수신자가 공유하는 임의의 책을 의미하며, 이는 암호학적 코드북과는 구별되는 개념이다. 한편 19세기와 20세기에는 데이터 압축의 비암호학적 목적으로도 코드북이 상업용 코드(commercial code)의 형태로 사용된 바 있다. 코드북을 1회용으로만 사용하면 원타임 패드(one-time pad) 암호와 유사한 안전성을 기대할 수 있으나, 실제 운용에서는 코드북의 반복 사용으로 인해 통계적 분석 등에 취약할 수 있다는 점이 지적된다.
또한 사회과학 분야에서 코드북은 설문조사나 데이터셋에서 변수와 그 값에 부여된 코드 목록을 정리한 문서를 가리키는 용어로도 사용되며, 이는 암호학에서의 코드북과 별개의 의미이다.