‘LibTMCG’ is a C++ library for creating secure and verifiable online card games. The library contains a sort of useful classes, algorithms, and high-level protocols to support an application programmer in writing such software. The most remarkable feature is the absence of a trusted third party (TTP), i.e., neither a central game server nor trusted hardware components are necessary. Thus, with the present library there is no need for an independent referee, because the applied protocols provide a basic level of confidentiality and verifiability by itself. Consequently, the library is well-suited for peer-to-peer (P2P) environments where no TTP is available. Of course, we cannot avoid that malicious players share information about their private cards, but the protocols ensure that the shuffle of the deck is performed randomly (presumed that at least one player is honest) and thus the cards will be distributed uniformly among the players. Further, no coalition can learn the private cards of a player against his will (except for trivial conclusions). The corresponding cryptographic problem, actually called “Mental Poker”, has been studied since 1979 (Shamir, Rivest, and Adleman) by many authors. LibTMCG provides the first practical implementation of such sophisticated cryptographic protocols.
The security and the verifiability rely on advanced cryptographic techniques—the so-called zero-knowledge proofs. Using these ‘building blocks’ the high-level protocols minimize the effect of coalitions and preserve the confidentiality of the players’ strategy, i.e., the players are not required to reveal their cards at the end of the game in order to show that they did not cheat. This important property is often required in card games like Poker, where not all cards are opened during the play and the applied individual strategy must be kept secret.
LibTMCG is Free Software according to the definition of the Free Software Foundation. The source code is released under the GNU General Public License Version 2.
|• Further Reading:|
|• Getting Started:|
|• Header Files and Name Spaces:|
|• Building Sources:|
|• Initializing the Library:|