I remember saying somewhere that this blog would be more personal than tech-related, but I guess so much of my life revolves around computers that those two are more or less the same thing. There was definitely a time in my life when I communicated better with transistors than with humans.
Recently I've been working on protochan, which is built on a modified blockchain. The blockchain needs a hashing algorithm for the proof-of-work, so I've been looking around for one. I just found Dash's X11, which chains eleven hashing algorithms to ensure no chance of inversion. Even if any individual algorithm is cracked, the whole chain of algorithms is still secure. The problem is, ASICs exist for X11 in spite of its complexity. Let's modify X11 to improve its ASIC-resistance.
X11 consists of eleven algorithms in a fixed order. Reordering the algorithms will render existing ASICs useless, but a reorder alone is obviously just as vulnerable to newly built ASICs as the existing X11 is. However, reordering them dynamically will require ASICs built for each individual algorithm and chained on-the-fly. I'm not even sure if that's possible without massive performance drops. The nearly 300 billion (11^11) possibilities guarantee that ASICs cannot be built for each permutation, so this seems viable.
How would this work? First, let's assign each algorithm a hexadecimal digit. Second, take the hash of the previous block in big-endian order, and examine the final 11 nibbles. Map each one to the corresponding algorithm mod 11, and execute them in order on the new block header.