Cantor–Zassenhaus algorithm

In computational algebra, the Cantor–Zassenhaus algorithm is a method for factoring polynomials over finite fields (also called Galois fields).

The algorithm consists mainly of exponentiation and polynomial GCD computations.

It was invented by David G. Cantor and Hans Zassenhaus in 1981.

[1] It is arguably the dominant algorithm for solving the problem, having replaced the earlier Berlekamp's algorithm of 1967.

It is currently implemented in many computer algebra systems.

The Cantor–Zassenhaus algorithm takes as input a square-free polynomial

(i.e. one with no repeated factors) of degree n with coefficients in a finite field

whose irreducible polynomial factors are all of equal degree (algorithms exist for efficiently factoring arbitrary polynomials into a product of polynomials satisfying these conditions, for instance,

, so that the Cantor–Zassenhaus algorithm can be used to factor arbitrary polynomials).

The algorithm may then be applied recursively to these and subsequent divisors, until we find the decomposition of

into powers of irreducible polynomials (recalling that the ring of polynomials over any field is a unique factorisation domain).

are contained within the factor ring

, all of degree d, then this factor ring is isomorphic to the direct product of factor rings

to the s-tuple of its reductions modulo each of the

are each irreducible, each of the factor rings in this direct sum is in fact a field.

The core result underlying the Cantor–Zassenhaus algorithm is the following: If

as before, and if any two of the following three sets is non-empty: then there exist the following non-trivial factors of

: The Cantor–Zassenhaus algorithm computes polynomials of the same type as

above using the isomorphism discussed in the Background section.

is of odd-characteristic (the process can be generalised to characteristic 2 fields in a fairly straightforward way.

[2] Select a random polynomial

is an element of a field of order

The multiplicative subgroup of this field has order

and C are non-empty and by computing the above GCDs we may obtain non-trivial factors.

Since the ring of polynomials over a field is a Euclidean domain, we may compute these GCDs using the Euclidean algorithm.

One important application of the Cantor–Zassenhaus algorithm is in computing discrete logarithms over finite fields of prime-power order.

Computing discrete logarithms is an important problem in public key cryptography.

For a field of prime-power order, the fastest known method is the index calculus method, which involves the factorisation of field elements.

If we represent the prime-power order field in the usual way – that is, as polynomials over the prime order base field, reduced modulo an irreducible polynomial of appropriate degree – then this is simply polynomial factorisation, as provided by the Cantor–Zassenhaus algorithm.

The Cantor–Zassenhaus algorithm is implemented in the PARI/GP computer algebra system as the factorcantor() function.