Is there a difference between $\mathbb{Z}_2^b$, $\text{GF}(2^b)$ and $\text{GF}(2)^b$? I have read a lot about Galois Fields (GF). They are also presented in The The Design of Rijndael: AES - The Advanced Encryption Standard on pages 13 and 14.


  In computer memory, the polynomials in $F[x]|_l$ with $F$ a finite field can be stored efficiently by storing the $l$ coefficients as a string.
  
  Example 2.1.6. The polynomial in GF$(2)|_8$ $$x^6+x^4+x^2+x+1$$ corresponds to the bit string $01010111$.


In their paper Differential propagation analysis of Keccak, they also use the notation $\mathbb{Z}_2^b$ : 


  In general, for a function $f$ with domain $\mathbb{Z}_2^b$, we define the
  weight of a differential $(u′, v')$ as
  $$w(u' \xrightarrow{f} v') = b - \log_2 |\{u: f(u) \oplus f(u \oplus u') = v'\}| $$


While I do understand the meaning of this notation (a binary input of length $n$), I also know that we can use finite fields to model such numbers. Hence my question:
Is there a difference between $\mathbb{Z}_2^b$, $\text{GF}(2^b)$ and  $\text{GF}(2)^b$
$\mathbf{Z}_2^b$ is the direct product of $b$ copies of $\mathbf{Z}_2$ ($\mathbf{Z}_2 \times\cdots \times \mathbf{Z}_2$, $b$ times). That is, its elements are $b$-tuples of elements of $\mathbf{Z}_2$, with both addition and multiplication defined componentwise. If $b &gt; 1$, it is not a field. In fact it is not even an integral domain, because $(0,1)\times (1,0) = (0,0)$.

$\mathrm{GF}(2^b)$ is the field with $2^b$ elements. Because it is a field, it is not the same thing as $\mathbf{Z}_2^b$ if $b &gt; 1$.

You should know that for any prime $p$, $\mathbf{Z}_p$ is a field with $p$ elements, so it is the same thing as $\mathrm{GF}(p)$.