Find a polynomial $P$ of lowest possible degree such that
(a) $P$ has integer coefficients,
(b) all roots of $P$ are integers,
(c) $P(0) = -1$,
(d) $P(3) = 128$.
1. **Identify the form of the polynomial:**
   Given the conditions:
   - \( P \) has integer coefficients,
   - All roots of \( P \) are integers,
   - \( P(0) = -1 \),
   - \( P(3) = 128 \),

   We can start by considering a polynomial of the form \( P(x) = \pm (x - a_1)(x - a_2) \cdots (x - a_k) \) where \( a_1, a_2, \ldots, a_k \) are integers.

2. **Use the condition \( P(0) = -1 \):**
   This implies that the constant term of \( P(x) \) must be \(-1\). If \( P(x) = \pm (x - a_1)(x - a_2) \cdots (x - a_k) \), then:
   \[
   P(0) = \pm (-a_1)(-a_2) \cdots (-a_k) = -1
   \]
   Therefore, the product of the roots \( a_1, a_2, \ldots, a_k \) must be \(\pm 1\).

3. **Use the condition \( P(3) = 128 \):**
   We need to find \( P(x) \) such that \( P(3) = 128 \). Suppose \( P(x) = \pm (x - a_1)(x - a_2) \cdots (x - a_k) \), then:
   \[
   P(3) = \pm (3 - a_1)(3 - a_2) \cdots (3 - a_k) = 128
   \]

4. **Consider the simplest polynomial form:**
   To satisfy the integer coefficient condition and the integer roots condition, we can consider \( P(x) = \pm (x - 1)^m (x + 1)^n \). This form ensures that the roots are integers and the coefficients are integers.

5. **Determine the coefficients:**
   Given \( P(0) = -1 \):
   \[
   P(0) = \pm (-1)^m (1)^n = -1
   \]
   This implies that the leading coefficient must be \( +1 \) and \( m \) must be odd.

6. **Use the condition \( P(3) = 128 \):**
   \[
   P(3) = (3 - 1)^m (3 + 1)^n = 2^m 4^n = 128
   \]
   We need to solve \( 2^m 4^n = 128 \). Note that \( 4^n = (2^2)^n = 2^{2n} \), so:
   \[
   2^m 2^{2n} = 2^{m + 2n} = 128
   \]
   Since \( 128 = 2^7 \), we have:
   \[
   m + 2n = 7
   \]

7. **Minimize the degree \( m + n \):**
   To minimize \( m + n \), we need to find the smallest possible values of \( m \) and \( n \) that satisfy \( m + 2n = 7 \). Trying different values:
   - If \( n = 3 \), then \( m + 2(3) = 7 \) implies \( m = 1 \).

   Therefore, the polynomial with the lowest degree is:
   \[
   P(x) = (x - 1)(x + 1)^3
   \]

8. **Verify the polynomial:**
   \[
   P(x) = (x - 1)(x + 1)^3 = (x - 1)(x^3 + 3x^2 + 3x + 1)
   \]
   \[
   P(x) = x^4 + 3x^3 + 3x^2 + x - x^3 - 3x^2 - 3x - 1 = x^4 + 2x^3 - 2x - 1
   \]
   \[
   P(0) = -1 \quad \text{and} \quad P(3) = (3 - 1)(3 + 1)^3 = 2 \cdot 64 = 128
   \]

The final answer is \( \boxed{ P(x) = (x - 1)(x + 1)^3 } \).