Byzantine Fault Tolerance For Distributed Systems