NIZKs for hash functions Hash functions such as SHA are considered as non-algebraic statements. How can one construct a NIZK proof to show that the output of a hash is computed correctly in an efficient manner.
For example, one could rely on ZKBoo, which in turn builds upon the MPC-in-the-Head paradigm by Ishai et al. The authors even provide an implementation, which demonstrates how to prove knowledge of a SHA-1 and SHA-256 preimage, respectively. The proofs are of linear size in the number of AND gates in the circuit. For more compact proofs you could have a look at SNARKs.

The authors discuss $\Sigma$-protocols, which are in fact interactive. However, as shown here or here, one can make those proofs non-interactive using the Fiat-Shamir transform (yielding security in the random oracle model) or the Unruh transform (yielding security in the quantum accessible random oracle model).