Cryptography is concerned with the conceptualization, definition and construction of computing systems that address security concerns. The design of cryptographic systems must be based on firm foundations. This book presents a rigorous and systematic treatment of the foundational issues: defining cryptographic tasks and solving new cryptographic problems using existing tools. It focuses on the basic mathematical tools: computational difficulty (one-way functions), pseudorandomness and zero-knowledge proofs. The emphasis is on the clarification of fundamental concepts and on demonstrating the feasibility of solving cryptographic problems, rather than on describing ad-hoc approaches. The book is suitable for use in a graduate course on cryptography and as a reference book for experts. The author assumes basic familiarity with the design and analysis of algorithms; some knowledge of complexity theory and probability is also useful.
Oded Goldreich is a professor of Computer Science at the Faculty of Mathematics and Computer Science of Weizmann Institute of Science, Israel. His research interests lie within the theory of computation and are, specifically, the interplay of randomness and computation, the foundations of cryptography, and computational complexity theory. He won the Knuth Prize in 2017.
Goldreich has contributed to the development of pseudorandomness, zero knowledge proofs, secure function evaluation, property testing, and other areas in cryptography and computational complexity.
Much of the foundational work in cryptography was done by Goldwasser, Micali (co-recipients of the Turing Award), Yao and Goldreich. This is a pretty good introduction to some of the key results and definitions. The definitions or variations thereof are shared across the breadth of the subject for the most part.
He seems like a smart guy and I appreciate the fact he wanted to share his knowledge but I don't think this is an easy book to read through. The proof writing can be verbose in a way that doesn't aid in comprehension and the the written intuition behind the proofs are insufficient in increasing understanding. This book is best read in combination with others, and reading other texts alongside this one is the only reason I got as far as I did.
If you disregard computational complexity, the problem of cryptography is trivial: a key longer than the plaintext is safe, the plainext should be XORed with the key to obtain the ciphertext, which should be XORed with the key to reveal the plaintext, and a key shorter than the plaintext is unsafe because all such keys can be enumerated, and only a small fraction would reveal meaningful plaintext. However, in the real world you cannot enumerate all the keys even 128 bits long. Suppose there was a way to stretch short keys into exponentially longer bit strings, which would be indistinguishable from random strings by any effective distinguisher? This book is about such problems: if you have a function that is hard to invert on 1% of 1000-bit strings, how can you use it to build a function that is hard to invert on 99% of 5000-bit strings?