I read briefly over the TSL/SSL key exchange protocol. I have to wonder about the whole pre-master-key procedure. Wouldn't it be sufficient if the client or server encrypted a generated session key with the other sides public key? Why the extra work?
The nonces prevent replay attacks. If the server didn't include a value into the handshake that's different for each connection, an attacker can record a connection and replay it. Mixing a server determined nonce into the key is an easy way to prevent such attacks.