I've had occasion to mention the symbolic math software Sage in a few answers, e.g about irreducibility over the binary field and factoring of rational polynomials. A good way to do off-the-cuff experiments is with an online Sage account, which has evolved into SageMathCloud.
For the example given in the Question, I made this online Sage workfile (create an account and a new project, and it will display an editable empty workfile):
P.<x> = GF(2)[ ]
f = x^30 + x^11 + x^10 + x^8 + x^7 + x^6 + x^3 + x^2
f.factor()
Running the project (leftmost icon) produces this output:
(x + 1) * x^2 * (x^3 + x + 1) * (x^4 + x^3 + x^2 + x + 1) * (x^5 + x^4 + x^3 + x + 1) * (x^15 + x^14 + x^13 + x^12 + x^4 + x^3 + x^2 + x + 1)
or in more concise (MathJax) form:
$$ (x + 1) * x^2 * (x^3 + x + 1) * (x^4 + x^3 + x^2 + x + 1) * (x^5 + x^4 + x^3 + x + 1) * (x^{15} + x^{14} + x^{13} + x^{12} + x^4 + x^3 + x^2 + x + 1) $$
Note that the "standard 16-bit CCITT polynomial" $G(x) = x^{16}+x^{12}+x^5+1$ cited in the Question is actually the product of the first and last of these irreducible factors.
I'm also a fan of Victor Shoup's NTL: A Library for doing Number Theory, "a high-performance, portable C++ library providing data structures and algorithms for manipulating signed, arbitrary length integers, and for vectors, matrices, and polynomials over the integers and over finite fields."
Halfway down this page we are told that Sage will use the NTL library for polynomials over the binary field, e.g. for multiplication and GCD's, at least if the command is appropriately framed:
sage: x = PolynomialRing(GF(2), 'x').gen()
sage: f = (x^3 - x + 1)*(x + x^2); f
x^5 + x^4 + x^3 + x
sage: g = (x^3 - x + 1)*(x + 1)
sage: f.gcd(g)
x^4 + x^3 + x^2 + 1
Developer level information is on this Sage documentation page.
Ultimately you may want to build a pipeline for factoring over the binary field that goes directly against NTL, cutting out the Sage middleman, as the bare C++ implementation should eliminate some overhead. Information about building NTL itself with the GF2X library is here.
I've built Sage from source a couple of times (it's a fully automated but time-consuming process). If I get around to doing a similar build from recent NTL source, I'll report my experiences here.
Finally this 2002 paper by von zur Gathen and Gerhard, "Polynomial Factorization over $\mathbb{F}_2$", may strike you as an accessible account of investigations extending Cantor-Zassenhaus.
Your calculations are correct.
It is worth keeping in mind that the quotient is not of importance in the CRC calculations, it is the remainder that is needed. The careful calculations
that you have carried out and written up in detail are good for familiarizing
oneself with the algorithm. However, after some practice, you may find the
following shorthand much more handy
010000
1101
1101
111
Best Answer
Let us use $x$ as an unknown. When dealing with CRCs a common choice is to use $D$ (as in DELAY) as the unknown, but your textbook (IMHO unwisely) has denoted the message by $D$ in that example, so let's use $x$ here.
We turn your message into a polynomial (with bits as coefficients) simply by using the bits as coefficients, so your $M=11100011$ becomes $$ M(x)=1\cdot x^7+1\cdot x^6+1\cdot x^5+0\cdot x^4+0\cdot x^3+0\cdot x^2+1\cdot x+1=x^7+x^6+x^5+x+1. $$ The CRC-polynomial $P=110011$ similarly becomes $$ P(x)=x^5+x^4+x+1. $$ Notice how the exponents of $x$ simply act as place holders in the sense that the bit in position $i$ is simply the coefficient of the power $x^i$.
The degree of our CRC-polynomial is five, so we shall add five redundant bits to the message $M(x)$. These redundant (or check) bits are also a polynomial $$ R(x)=r_4x^4+r_3x^3+r_2x^2+r_1x+r_0, $$ but we don't know those bits $r_i,i=0,1,2,3,4,$ yet the task is to calculate them! One of the questions that you asked was: how do we know that there will exactly five check bits? The reason is that when we divide other polynomials by $P(x)$ the remainder of (long) division will have degree that is less than the degree of $P(x)$. So in this case it will have degree at most four (just like the polynomial $R(x)$ above), and polynomials of degree at most four are specified by five coefficients (like $r_i,i=0,1,2,3,4$). In other words, you always have $n-k=$ the length of $P$ minus $1$, here $n-k=6-1$. Given that the message is $k=8$ bits long, you get $n=k+(n-k)=8+(6-1)=13$ bits.
The idea in CRC-calculation is to first make room for those $n-k=5$ bits at the LSB-end of $M(x)$ by multiplying it with $x^5$. Then the rule for selecting the polynomial $R(x)$ is that the polynomial $$ M(x) x^{n-k}+R(x)=M(x)x^5+R(x) $$ must be divisible by the CRC-polynomial $P(x)$. So the polynomial $R(x)$ must be the negative of the remainder, when $M(x)x^5$ is divided by $P(x)$. Because modulo 2 we have that $-0=0$ and $-1=1$ we can forget about that 'negative'. Let's calculate! The product $R_0:=M(x)x^5=x^{12}+x^{11}+x^{10}+x^6+x^5$ is of degree twelve. In other words it has a total of $n=13$ coefficients. To compute the remainder of polynomial division we keep subtracting multiples of $P(x)$ from this polynomial as long as we can. Because $P(x)$ is of degree five, and the highest degree term of $R_0$ is $x^{12}$ we subtract from it (or add to it as it makes no difference!) the polynomial $x^7P(x)$. Here $7=12-5$ is chosen to make the highest degree terms both be of degree twelve. So we compute the first remainder $$ R_1:=R_0+x^7P(x)=(x^{12}+x^{11}+x^{10}+x^6+x^5)+x^7(x^5+x^4+x+1)=x^{10}+x^8+x^7+x^6+x^5. $$ Notice that we were a bit lucky in the sense that in addition to the degree twelve terms, also the degree eleven terms cancelled. This remainder is of degree ten, which is still too high. The polynomial $x^5P(x)$ is also of degree ten, so let's add that next: $$ R_2:=R_1+x^5P(x)=(x^{10}+x^8+x^7+x^6+x^5)+x^5(x^5+x^4+x+1)=x^9+x^8+x^7. $$ This is of degree $9>4$, so we continue $$ R_3:=R_2+x^4P(x)=(x^9+x^8+x^7)+x^4(x^5+x^4+x+1)=x^7+x^5+x^4. $$ Still too high degree... $$ R_4:=R_3+x^2P(x)=(x^7+x^5+x^4)+x^2(x^5+x^4+x+1)=x^6+x^5+x^4+x^3+x^2. $$ ...not there yet... $$ R_5:=R_4+x P(x)=(x^6+x^5+x^4+x^3+x^2)+x(x^5+x^4+x+1)=x^4+x^3+x. $$ Tadaa! This remainder is finally of degree less than that of $P(x)$, so we must stop. So we are done, and may set $R(x):=R_5 =x^4+x^3+x.$
As the finishig touch we first compute the sum $$ M(x)x^5+R(x)=x^{12}+x^{11}+x^{10}+x^6+x^5+x^4+x^3+x, $$ and then extract the coefficients of the terms $x^{12},x^{11},\ldots,x^2,x,x^0=1$ (in that order) to form get the final string of 13 bits $$ 11100011|11010. $$ Here the original message is the first 8 bits, and the CRC-check (or whatever you call it in your application) is the last five bits, i.e. $11010$.