I was thinking about non-cryptographic hash function and PRNG design involving multiplication. I was wondering if you could use the product of two variables mod a power of two without worrying about one or both operands not being odd.
If one operand is even (or worse, a multiple of a much larger power of two) then you start losing information due to arithmetic overflow.
Use the product of two variables to modify a third, I mean. The transformation needs to be bijective. (And I'm pondering about both operands being variable because making one operand an odd constant works fine. And that's just boring.)
I was wondering if doing something feistel-like but with xnor instead of xor would be enough to cancel out the effect of trailing zeros in the factors of the product. Outside the setting of cryptography maybe some lightweight hack can compensate for that. The higher the trailing bit count, the less likely it would be for it to be the input to the first round of a function.
Anyone know of references concerning the properties of multiplication mod a power of two? (Just relying on Feistel round functions not needing to be invertible is uninteresting. Using more rounds or more-complex rounds is undesirable within the context of competing with non-secure algorithms.)
Let $E_k$ be a cipher with a uniform random key $k$ unknown to the adversary. Actually this can be any pseudorandom function family; its invertibility is not relevant in the chosen-plaintext attack model. It might keep state, or it might be randomized; filling in the details of state and/or ran...
$P_n$ works fine but $\tilde P_n$ pushes the $n$ subscript waaaay over to the right out into the white abyss.
So, this is not a PPT distinguisher with nonnegligible advantage. Can you either find a PPT distinguisher against G, or prove that any PPT distinguisher against G can be used to make a PPT distinguisher against G_0?
(Remember the hint! Use it with the law of total probability.)
If possible let A be a distinguisher for G, then, |Pr[A(G(u||s)) = 1] - Pr[A(r) = 1]| > negl. Now, Pr[A(G(u||s)) = 1] = 1/2^n.Pr[A(0) = 1] + (1-1/2^n)Pr[A(G_0(u||s)) = 1].
If we plug the expression for Pr[A(G(u||s)) = 1] in that inequality, we get |1/2^n(Pr[A(0)=1] - Pr[A(G_0(u||s)) = 1]) + Pr[A(G_0(u||s)) = 1] - Pr[A(r) = 1] | > negl.
So, let's say you finish proving that G, as defined in terms of G_0, is nearly as good a PRG as G_0. What about G'? Is there a PPT distinguisher against G' with nonnegligible advantage?
Or can you find a PRG G for which G' is in fact totally insecure?
> So, let's say you finish proving that G, as defined in terms of G_0, is nearly as good a PRG as G_0. What about G'? Is there a PPT distinguisher against G' with nonnegligible advantage?