Teaching

Classes I’ve been teaching since joining Texas A&M’s CS Department:

  • CSCE 411: Design and Analysis of Algorithms (undergraduate). Study of computer algorithms for numeric and non-numeric problems; design paradigms; analysis of time and space requirements of algorithms; correctness of algorithms; NP-completeness and undecidability of problems.
  • CSCE 629: Analysis of Algorithms (graduate). Concrete algorithm design and analysis; abstract models to analyze the complexity of problems; NP-Completeness; approximation and probabilistic algorithms.
  • CSCE 689: Foundations and Applications of Blockchains (graduate). As the first decentralized cryptocurrency, Bitcoin has ignited much excitement, not only for its novel realization of a central bank-free financial instrument, but also as an alternative approach to classical distributed computing problems, such as reaching agreement distributedly in the presence of misbehaving parties, as well as to numerous other applications – contracts, reputation systems, name services, etc. The soundness and security of these applications, however, hinges on the thorough understanding of the fundamental properties of its underlying blockchain data structure, which parties (“miners”) maintain and try to extend by generating “proofs of work” (aka “cryptographic puzzles”). In this course we will formulate such fundamental properties of the blockchain, and then formally show how applications such as consensus and a robust public transaction ledger can be built “on top” of them. This will entail the specification and contrast of computational models on which blockchain protocols are run, and the required setup assumptions, computational assumptions and cryptographic tools that enable their operation.
  • CSCE 711: Foundations of Modern Cryptography (graduate/stacked). While cryptography is an ancient field, the emergence of modern cryptography in the last few decades is characterized by several important features distinguishing it from classical cryptography. For one thing, the availability of computers and the wide spread of networked information systems and the Web, has dramatically increased both the need for sound cryptography, and the possibilities that it can offer. In addition to the classical military and national security applications, a wide scope of financial, legal, and social cryptographic applications has emerged, from securing online payments or sending an end-to-end encrypted email, to more ambitious goals of electronic commerce, electronic voting, contract-signing, database privacy, cryptocurrencies, and so on. The most important characteristic of modern cryptography is its rigorous, scientific approach, based on firm complexity-theoretic foundations. In contrast to the classical approach based on ad-hoc solutions (design a scheme that seems very hard to break, and hope for the best), modern cryptography aims for specific, rigorously quantifiable security guarantees, based on precise mathematical definitions, reductions, and provably secure protocols.