Modern Cryptography provides algorithmic solutions to securely compute over the private data of mutually distrustful parties. These solutions require algorithmic or physical building blocks such as computational hardness assumptions, trusted hardware, correlated private randomness and noisy channels. A fundamental limitation of these solutions is that their security necessarily hinges on the assumption that these underlying building blocks are free of any imperfection. Over the last decade, however, this assumption has been repeatedly proven false in the real world, often rendering these solutions completely insecure. This raises the following important question: �Can secure computation be based on imperfect building blocks?� My research provides algorithmic solutions that resolve this question in the affirmative.