Ask Your Question

Revision history [back]

I'll call K the field GF(2^8), a its generator, and x a generic element of K.

sage: K.<a> = GF(2^8,'a')

Isn't there a problem with your first equation?

(1)    f((a+x)^(2^8-1)) = a + x

This is saying (changing x to x + a) that for every x in K, f(x^(2^8-1)) equals x.

Since for any nonzero x in K, x^(2^8-1) equals 1,

sage: all((x == 0 or x^(2^8-1) == 1) for x in K)
True

this is saying that f(0) equals 0 and that for every nonzero x in K, f(1) equals x.

No well-defined function from K to K can satisfy that!

click to hide/show revision 2
Edit after an edit in the question (exponent changed from 2^8-1 to 2^8).

I'll call K the field GF(2^8), a its generator, and x a generic element of K.

sage: K.<a> = GF(2^8,'a')

Isn't there a problem with your first equation?

(1)    f((a+x)^(2^8-1)) = a + x

This is saying (changing x to x + a) that for every x in K, f(x^(2^8-1)) equals x.

Since for any nonzero x in K, x^(2^8-1) equals 1,

sage: all((x == 0 or x^(2^8-1) == 1) for x in K)
True

this is saying that f(0) equals 0 and that for every nonzero x in K, f(1) equals x.

No well-defined function from K to K can satisfy that!

EDIT:

The new form of your first equation (with exponent (2^8) instead of (2^8-1)):

(1)    f((a+x)^(2^8)) = a + x

is saying that for every x in K, you have f(x) = x. Indeed,

sage: all(x^(2^8) == x for x in K)
True

Equation (3) is void, since, given that f(x) is in K, of characteristic 2, obviously f(x) + f(x) equals 0 for any x in K.

Equation (2) is saying that for any x in K, f(x^(2^6)) equals (x+a)^(2^6) + a^(2^6). This is saying that f is the identity when restricted to (2^6)-th powers:

sage: all(x^(2^6) == (x+a)^(2^6) + a^(2^6) for x in K)
True

so it is a priori weaker than equation (1), except that the map sending x to x^(2^6) is in fact a bijection from K to K:

sage: len(set(x^(2^6) for x in K)) == len(K)
True

so equation (2) is also saying that f is the identity map on K.

In the end, for the purpose of your exercise, using Sage for small computations in K was enough, and manipulating an undefined function from K to K was not needed.