<p>Even though i'm a beginner in everything that concerns cryptocurrencies, please let me propose a guess, that others more prepared will correct. The idea is that an ASIC is a very specialized piece of hardware, dedicated to a single algorithm. If you keep changing the algorithm, there will be no way to create an ASIC that will mimick it; to implement such an algorithm, you'd have to use a piece of hardware so generalized that it would have to be a CPU.</p>

CC BY-SA 3.0
2015-02-17T21:26:25.213Z
My question isn't about what makes this ASIC resistant because that's obvious. My question is *how* can something like this be implemented. Even a simple example to illustrate. So this response doesn't answer my question.
greatwolf
CC BY-SA 3.0
2015-02-17T22:00:17.537Z
Dear @greatwolf, that is a matter of implementation technique and would certainly need serious studies to see what ASIC designers can't do. 

But a guess would be to use a hash function that was the concatenation of many different hash functions, maybe randomly selected. As long as their number was large enough, it would not be economically feasible to implement all of them in hardware.

It`s important to mention that Vitalik's proposal doesn't really exclude such an alternative.
hgfernan
CC BY-SA 3.0
2015-02-17T21:05:33.277Z
2015-02-17T21:05:33.277Z
hgfernan
<p>From Vitalik Buterin's post regarding "<a href="https://blog.ethereum.org/2014/06/19/mining/" rel="nofollow noreferrer"><strong>On Mining</strong></a>", he mentions:</p>

<blockquote>
  <p>The second approach is somewhat different: create a mechanism for
  <em>generating new hash functions</em>, and make the space of functions that it
  generates so <em>large</em> that the kind of computer best suited to processing
  them is by definition completely generalized, ie. a CPU. This approach
  gets close to being “provably ASIC resistant” and thus more
  future-proof, rather than focusing on specific aspects like memory...</p>
</blockquote>

<p>My question is how would such a mechanism work and how might it be implemented or realized?</p>

<p>What's unclear to me is how can you have a PoW mechanism that's able to just create new never-before-seen hash functions on its own and somehow have all the nodes on the network derive this hashing algorithm in an independent, trustless manner? A second major concern is how can you be sure that this derived algorithm is even cryptographically secure?</p>

<p>Note, I found a similar question <a href="https://bitcoin.stackexchange.com/q/35679/963">here</a>. But there is a crucial difference: that question is in regards to picking from a <em>finite set</em> of predefined cryptographically vetted hash functions and changing their call orders dynamically. The method Vitalik is suggesting, the mechanism is deriving a new hash function that never existed before and using that as the PoW function for a given block at that point in time.</p>

CC BY-SA 3.0
2015-02-14T07:51:49.090Z
Similar to http://bitcoin.stackexchange.com/questions/18633/could-an-algorithm-be-made-asic-resistant-by-simply-adding-deterministic-permuta
Nick ODell
CC BY-SA 3.0
2015-02-15T09:52:45.737Z
I've contacted Vitalik to see if he can weigh in on this
Wizard Of Ozzie
CC BY-SA 3.0
2015-02-15T22:41:07.383Z
That would be helpful. Hope he response, maybe even give an answer here himself.
greatwolf
<asic><proof-of-work><algorithms><altcoin-development>
ASIC resistant PoW mechanism that generates new hash functions. How does that work?
greatwolf
# ASIC resistant PoW mechanism that generates new hash functions. How does that work?

(Asked by: username_0 on 2015-02-14)

From Vitalik Buterin's post regarding "[**On Mining**](https://blog.ethereum.org/2014/06/19/mining/)", he mentions:

> The second approach is somewhat different: create a mechanism for
> *generating new hash functions*, and make the space of functions that it
> generates so *large* that the kind of computer best suited to processing
> them is by definition completely generalized, ie. a CPU. This approach
> gets close to being “provably ASIC resistant” and thus more
> future-proof, rather than focusing on specific aspects like memory...

My question is how would such a mechanism work and how might it be implemented or realized?

What's unclear to me is how can you have a PoW mechanism that's able to just create new never-before-seen hash functions on its own and somehow have all the nodes on the network derive this hashing algorithm in an independent, trustless manner? A second major concern is how can you be sure that this derived algorithm is even cryptographically secure?

Note, I found a similar question [here](https://bitcoin.stackexchange.com/q/35679/963). But there is a crucial difference: that question is in regards to picking from a *finite set* of predefined cryptographically vetted hash functions and changing their call orders dynamically. The method Vitalik is suggesting, the mechanism is deriving a new hash function that never existed before and using that as the PoW function for a given block at that point in time.

**Tags:** asic, proof-of-work, algorithms, altcoin-development

> **Comments:**
> **username_1**: Similar to http://bitcoin.stackexchange.com/questions/18633/could-an-algorithm-be-made-asic-resistant-by-simply-adding-deterministic-permuta  
> **username_2**: I've contacted Vitalik to see if he can weigh in on this  
> **username_0**: That would be helpful. Hope he response, maybe even give an answer here himself.  

---

## 1 answers

### Answer by username_3 on 2015-02-17. Score: 2

Even though i'm a beginner in everything that concerns cryptocurrencies, please let me propose a guess, that others more prepared will correct. The idea is that an ASIC is a very specialized piece of hardware, dedicated to a single algorithm. If you keep changing the algorithm, there will be no way to create an ASIC that will mimick it; to implement such an algorithm, you'd have to use a piece of hardware so generalized that it would have to be a CPU.

> **Comments:**
> **username_0**: My question isn't about what makes this ASIC resistant because that's obvious. My question is *how* can something like this be implemented. Even a simple example to illustrate. So this response doesn't answer my question.  
> **username_3**: Dear @username_0, that is a matter of implementation technique and would certainly need serious studies to see what ASIC designers can't do.   But a guess would be to use a hash function that was the concatenation of many different hash functions, maybe randomly selected. As long as their number was large enough, it would not be economically feasible to implement all of them in hardware.  It`s important to mention that Vitalik's proposal doesn't really exclude such an alternative.  

---

