I am right now studying Pseudo Random Functions. I have a couple of constructions made of a safe PRF F:{0,1}^l x {0,1}^l -> {0,1}^l. I am unsure of wether these are safe ( in terms pseudorandomness ) or not. I will try and reason. Correct me if I am wrong.
1.) F1 = F(k,x)||k
F1 is not safe, since the concatenation of k will always happen. Since the k is fix it should be the same for two different requests x1 and x2 right? An attacker would notice that and realize that F1 is not a PRF.
2.) F2 = F(k,x) XOR y, where y is random {0,1}^l
This should be safe even if y wasnt random. Since F is pseudorandom the attacker cant distinguish between F and F XOR y since it is still looking random to the attacker, wether y is randomly selected or not.
3.) F3 = F(F(k,x),0^l)
So the inner F(k,x) acts as a key for the outer F. So this reduces to F(k',0^l). The input is plainly 0 but since we have a valid key unequal to zero,F3 should be pseudorandom. Additional question: Now if the key where to be 0^l and the input x something different then 0^l, we would receive an output exactly the same as the input x, every time right ?
I appreciate your time & effort