1) "knowledge proof" : proving that you have some information . E.g. suppose I claim that a graph can be colored with only 3 colors. I can prove that I know a coloring for the graph with 3 colors, by presenting you with that graph.
2) "zero knowledge" : Suppose I want to prove to you (or at least, give you very strong evidence) that I know a 3-coloring for the graph, but I don't want to give you any information about how to color the graph with 3 colors.
This can be done in a way where I first randomly permute the 3 colors, and then commit to a particular coloring without showing you anything about it (e.g. I give each node on the graph a random salt, and show you the hash of (the color and the salt appended) for each node ), and ask you to pick any two nodes of the graph. I reveal the color and salt for those two nodes, and you can check that they make the hash I said they did. If the two nodes are connected by an edge, then the colors I give have to be different (if they are the same then my proof is invalid and you shouldn't believe my claim that I have a coloring of the graph with 3 colors.)
By repeating this process many times (each time I randomly permute the colors/names-of-the-colors, and make a new commitment about each node), and each time you choose a random pair of (adjacent) vertices, then, if I didn't actually have a coloring of it with 3 colors, there's a high chance you would eventually find that the pairs you asked me to reveal, have the same color. So, if we keep doing this, and I'm telling the truth, eventually you should have strong evidence that I have a coloring for it, but without you getting any information about that coloring (other than that it is one) (because by permuting the colors each time, the only info you get about the nodes you asked about, is that the colors are different, which is already implied by it being a coloring.)
So, that would be a zero knowledge proof that I know how to color that graph using only 3 colors, with no 2 nodes having the same color.
(of course, the thing with coloring graphs is just an example, one which is relatively easy to give a protocol for.)
3) "non-interactive" : accomplishing the same sort of thing, except instead of us sending many messages back and forth like in what I described above, instead, I just do one computation (using the knowledge I have), and then I give you the output of that computation, and you can check that with some algorithm, and the algorithm says "yep" if I gave you a good output, and "nope" if I gave you a bad output, and, if I had the info I claim to have and used it for the input to my computation, then you will always get the result "yep", while if I don't have the info I claim to have, then the probability that I succeed in giving you a good output, one which would make your program say "yep", is negligible.
__
Hopefully that helps make the idea more clear?
You might be wondering why this idea is applicable to cryptocurrency stuff?
A number of reasons. Being able to prove that you have some information that satisfies a given property, without revealing the information, is fairly powerful.