What is the public key used to generate the Genesis block? I'm trying to create and build a working fork of Bitcoin -- in order to understand how it works at the source code level. I see a lot of articles explaining how to create altcoins but they are not very helpful for the learning purpose as they skip a lot of details and tend to tell you what to do without explaining why. 

Regarding this question, I couldn't find any article/document even remotely mentioning anything about the public key used for generating the genesis block -- I believe this is an important things to know, at least because it's been used to generate the genesis block of Bitcoin. Looking at the source code:

Bitcoin 0.1.5 - main.cpp @1490:


  txNew.vout[0].scriptPubKey = CScript() &lt;&lt; CBigNum("0x5F1DF16B2B704C8A578D0BBAF74D385CDE12C11EE50455F3C438EF4C3FBCF649B6DE611FEAE06279A60939E028A8D65C10B73071A6F16719274855FEB0FD8A6704") &lt;&lt; OP_CHECKSIG;


Bitcoin 0.8.0 main.cpp @2715


  txNew.vout[0].scriptPubKey = CScript() &lt;&lt; ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") &lt;&lt; OP_CHECKSIG;


These two public keys are same. First one appeared in the very first version of Bitcoin -- as far as I can see in the Github repo. Second one is the latest usage before it being totally removed from the source code.

My questions are:


What is this public key? Is this [supposedly] Satoshi's personal public key or just a random key generated for the sake of generating the genesis block?
Is there any other application for this public key or it's only useful when generating the genesis block? e.g. signing transactions? verifying the integrity of the mined blocks?
There are different formats used for Public/Private key pairs. What is  the format used for this specific key? Is there any built-in API/utility inside the Bitcoin source that could be used for generating or testing the validity of the key?
What are the consequences of using a broken/invalid public key at this stage? Given the fact that the genesis block is unspendable.
Second one is the latest usage before it being totally removed from the source code.


It wasn't removed. It just got moved:

static CBlock CreateGenesisBlock(uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount&amp; genesisReward)
{
    const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
    const CScript genesisOutputScript = CScript() &lt;&lt; ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") &lt;&lt; OP_CHECKSIG;
    return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
}


(Source.)


If you mean "Is it the key that he used to sign announcements and emails," no. That's the PGP key 5EC948A1. If you mean, "Is this the key that can broadcast alerts," no. That's defined here:

https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L90

The key is thought to belong to Satoshi Nakamoto, though.
It's useless. You don't actually need the private component of the key to generate or verify the genesis block. And, like you say, you can't even spend the associated Bitcoins. For all we know, it might just be a random point on the ECDSA curve, with no associated private key. 
This appears to be a normal uncompressed key. It starts with 0x04, followed by 64 bytes. The difference in how it was expressed between 0.1.5 and 0.8.0 is just a result of endianness. As for how to generate it, just call getnewaddress followed by validateaddress on the result.
Nothing.