How does forging work?
Below is an explanation how forging works at the current moment, in the future this will be slightly changed.

Every block has two fields - BlockSignature and GenerationSignature.

The former is filled by signing the block data with the private key of an account that generated a block and has almost nothing to do with forging process.

The latter is filled by computing SHA256(GenerationSignatureOfPreviousBlock+PublicKeyOfAccount).

The first 8 bytes of the hash give an unsigned 64-bit number in little-endian format, this number is called "hit".

Every account has a so-called EffectiveBalance which is usually (but not always) higher if the account holds more coins. EffectiveBalance is multiplied by some value that is the same for all the accounts - BaseTarget (it's adjusted every block trying to keep block generation rate at 1 minute) - and by number of seconds that have passed since the previous block. The resulting value is called "target".

If "hit" is less than "target" then peers accept a block and attach it to the blockchain.

This is the essential part of forging. I omitted such obvious things as validation of transaction signatures, checks for double-spending, etc.