Qubic crypto details
Dec 31, 2023
In the unofficial interim whitepaper (Qubic unofficial interim whitepaper) I did not go into the nitty gritty crypto algorithms used and for those who are not comfortable reading C++ code I wrote this small addendum:
Instead of SHA256 hashing, qubic uses K12 (Keccak Team) which is an improvment over SHA256 and of course faster. Other than the substitution of K12 for SHA256, qubic uses standard publickey/privatekey crypto in a standard way! One of the few areas where things are the same.
Externally, a 55 lowercase alpha seed is used, but this is mapped to binary values 0 to 25 and then K12 hashed twice to make the actual 256 bit privatekey. The publickey is generated from the privatekey with a ecc_mul_fixed call. The user visible addresses are generated from the bits of the publickey with a checksum based on K12 of the publickey. All this and even making a txhash is in 100 lines of easy to understand code in qubic-cli/keyUtils.cpp
Astute readers will note that since internally the seed is mapped to a 256 bit high entropy privatekey, a wallet could implement 24 BIP39 words to manage user addresses instead of the qubic specific 55 char seeds.
Each epoch a new set of computors are determined by the arbitrator based on the performance of the prior epoch. The list of the 676 computors are broadcast by the arbitrator and this allows all nodes to verify that the proper computor signed a specific tick. Each tick the next computor on the list becomes the tick leader and will sign it if it achieves quorum. So the tick data can be verified by having a signature from the proper computor.
Then of course each transaction can be verified to have been signed by the appropriate privatekey. This makes everything in qubic cryptographically verifiable, even though there is no explicit link between the blocks.
Even the empty tick has to be agreed by quorum that the tick was empty so nodes cannot be attacked by being sent empty tick when it actually was not empty.