As a subject for college students, cryptography has come a long way in a hurry. Back when I was an undergraduate, there were (at least at my college) no undergraduate courses in the area for math majors, but now, 40-some years later, books on cryptography seem to be quite the rage. Anyone with internet access and a few minutes of free time can easily find dozens of titles, ranging from books accessible to high school students to research-level monographs. For undergraduates, one can find books on a variety of levels, from texts intended to be read by math majors to books designed for “general education” courses taken by students to satisfy a mathematics requirement.

In terms of prerequisites and overall tone, this book fits in the latter category, but with a caveat. Little mathematics background is assumed on the part of the reader, and a strict “theorem/proof” format is eschewed. To this extent, the book is suitable for a general undergraduate audience. However, the reader of this book is expected to be willing to think hard about some issues, and some real mathematics is discussed here.

This book, I think, invites comparison to others such as *Cryptology: Classical and Modern with Maplets* by Klima and Sigmon, another general-readership text on the subject reviewed here about a year ago. Both books are good, clear introductions to the subject that employ a healthy dose of interesting history to liven up the material. Interesting examples of World War II cryptography (the Enigma machine, Navajo code talkers) are discussed in both texts, for example, as are the other standard topics for such an introductory course: the classical examples of cryptosystems and attacks on them, and more modern examples such as RSA and AES.

However, the book under review differs from the Klima/Sigmon text in several particulars. First, the Cozzens/Miller text covers more material in less space. It is about 150 pages shorter than Klima/Sigmon but covers a number of topics not mentioned in it, including an introduction to coding theory and error correction, steganography, and primality testing, including the relatively recent result (discussed, but of course not proved) that there is a deterministic, polynomial-time algorithm for determining whether a given positive integer is a prime. This additional coverage is achieved by employing a style of writing that, while still accessible, is a bit terser and less chatty than that employed in the Klima/Sigmon text.

In addition, the book under review puts somewhat more emphasis on the underlying mathematics than does the Klima/Sigmon text. Indeed, the authors of the latter book state in the preface that parts of it could “be used in courses designed to be free of mathematics”. That’s not the kind of book that professors Cozzens and Miller intended here, however; the word “mathematics” appears in the title, after all, and their preface begins with the statement that 21^{st} century citizens require “some level of mathematical proficiency”. While, as noted earlier, the book does not go in for a rigid theorem/proof style, there are indeed occasional proofs both in the text (the infinitude of primes, for example) and in the exercises (one of which, for example, asks the reader to prove that if *m* and *n* are relatively prime, then \(\varphi(mn) = \varphi(m)\varphi(n)\), where \(\varphi\), of course, is Euler’s totient function). In addition, the bibliography to this text lists not just books but also some journal articles. The authors have, however, done an excellent job of presenting this material in as painless and accessible a way as possible.

The authors do state in the preface that although this text grew out of courses for non-majors, it could also be used as a text for a one-semester course for “mathematics, science or engineering majors”. That’s likely true, but some people might have reservations about using this as a text for an upper-division course for mathematics majors, if only because of the relatively modest prerequisites, lack of a more formal theorem/proof style, lack of coverage of some topics (e.g., elliptic curve cryptography) that a professor of such an upper-division course might want to cover, and lack of many exercises that would challenge a mathematics major. (There are quite a few exercises, but many of them are of a computational or essay nature; the ones that do call for proofs do not generally call for very difficult ones (at least by the standards of a course for majors)). The webpage for the book advises that a solutions manual exists and can be obtained by emailing Professor Miller, but as I haven’t seen this manual I can’t comment on it.

In terms of overall sophistication and difficulty, I would place this book somewhere between the Klima/Sigmon text and such standard undergraduate texts as the one by Hoffstein, Pipher and Silverman (HPS). (The authors’ proof of the infinitude of primes, a result left as an exercise in HPS, is here, for example, preceded by a discussion about what it means to prove something by contradiction, which might be taken for granted in an upper-level cryptography course for math majors; likewise, there is an earlier appendix discussing proofs by induction.) In general, therefore, I would say this text would make a demanding text for a general-education course or a relatively easy one for a course for math majors. It would, I suspect, also be a great choice as a text for an honors seminar with little formal mathematical training required as a prerequisite.

Mark Hunacek (mhunacek@iastate.edu) teaches mathematics at Iowa State University.