The goal of program obfuscation is to scramble a computer program, hiding its implementation details making it hard to reverse-engineer, while preserving the functionality i.e, inputoutput behavior of the program. Program obfuscation is widely used in practice, enabling the distribution of code for performing largescale distributed computations e.g., in applications such as Skype, while ensuring that users employ the service in the intended way. But these usages largely rely on ad-hoc heuristics that often get broken. Our research has developed new techniques towards provably secure obfuscation. More generally, we have developed new techniques for proving the security of largescale distributed services, including the first provably secure constructions of largescale MPC, proving the security of Nakamotos blockchain protocol, and developing the first 2-round non-malleable commitment a crucial component for round efficient MPC.