1. If the i-th packet is corrupted, the packet (c_i, f_i, r) might be
replaced by some other triple (c'_i, f'_i, r) such that f'_i is a valid
fingerprint on c'_i (i.e., F(c'_i,r) = f'_i). If it just so happens
that the i-th packet is corrupted in this way, then everything will be
all messed up: the recipient will think that he has received c'_i
correctly (even though it is actually erroneous) and use it in his
polynomial interpolation. If you include one erroneous point in the
input to the polynomial interpolation, the polynomial you get out will
be all messed up.
Alternative answer: The i-th packet might just happen to be corrupted
from (c_i, f_i, r) into (c'_i, f_i, r) where it just so happens that
f_i is a valid fingerprint on c'_i, i.e., F(c_i,r) = F(c'_i,r). That
screws everything up, as described above.
Alternative answer: The i-th packet might just happen to be corrupted
from (c_i, f_i, r) into (c'_i, f'_i, r') where all three values appear
(to the recipient) to be consistent, i.e., F(c'_i,r') = f'_i, and then
the recipient is hosed.
Alternative answer: There is a very small chance (say, a probability
of 1/2^100) that the fingerprint fails to detect an error in c_i.
Comment: In fact, it's worse than that: if someone is tampering
maliciously with the data that's being sent, they can guarantee
that their modification will be undetected, no matter what value
of r the sender chooses. This is because the sender has to choose
r first; then the malicious individual gets to see c_i, f_i, r,
and at that point it is easy to find another value c'_i such that
F(c'_i,r) = F(c_i,r).
2. Computing the sequence of values 1, i, i^2, .., i^n mod q takes
n multiplications mod q (each number in the sequence is obtained by
multiplying the prior number in the sequence by i and reducing mod q),
and each multiplication mod q requires O((lg q)^2) bit operations, so
computing this sequence takes O(n (lg q)^2) bit operations. Then
we multiply 1 * a_0, i * a_1, i^2 * a_2, ..., i^n * a_n, and reduce
modulo q. This requires n more multiplications, so O(n (lg q)^2) more
bit operations. Finally we add these up, which takes n-1 additions
modulo q, or O(n lg q) bit operations. In total, we have done
O(n (lg q)^2) + O(n (lg q)^2) + O(n lg q) = O(n (lg q)^2) bit operations.
Alternative answer: In the k-th iteration of the loop, we compute
i^k mod q (which takes O(k (lg q)^2) bit operations, since it involves
k multiplications modulo q), then multiply that by a_k (which takes
O((lg q)^2) bit operations). Therefore each iteration requires
O(k (lg q)^2) + O((lg q)^2) = O(k (lg q)^2) bit operations. Adding
these up for k=1,2,...,n gives O((1+2+..+n) (lg q)^2), i.e.,
O(n^2 (lg q)^2) bit operations. Finally we sum up the result of each
iteration, which adds another O(n lg q) bit operations. In total this
is O(n^2 (lg q)^2) bit operations.
See Discussion Section 7 for more discussion of this problem and
yet another alternative answer.
General comment: This quiz was probably the hardest one I have given
so far. If you had some difficulties, you're not alone!