This book represents the second edition of the successful book Introduction to Reliable Distributed Programming, published first in 2006. The scope has been extended to include security against malicious actions by non-cooperating processes. This important domain has become widely known under the name Byzantine fault-tolerance.