What can be the reason to change transaction ID? I always thought that when my wallet create a transaction, it's transaction id is fixed (it is the SHA256 of the transaction message). Yes, the transaction might not be included in the next block (and can even be dropped completely) but if it will be included the transaction ID is fixed. Apparently this is not correct:


  Transaction IDs are not authoritative until a transaction has been
  confirmed. Absence of a transaction hash in the blockchain does not
  mean the transaction was not processed. This is known as "transaction
  malleability," because transaction hashes can be modified prior to
  confirmation in a block. After confirmation, the txid is immutable and
  authoritative.


Can anyone explain 


the reasons why transaction ID can be changed?
Who can change this ID (I assume a miner who mined a block)?
What field in the transaction message can be changed to warrant the change of txId?
I think What is transaction malleability will answer most of it. But to summarize it in terms of your actual questions:


  
  the reasons why transaction ID can be changed?
  


Because someone can create another transaction (= different transaction message) that accomplishes the same thing as yours, while reusing your signatures.

The reason the signatures can be reused in a different message is because the signatures don't sign themselves. They don't sign themselves because that would require a dependency loop (the transaction message depends on the signature, and the signature signs the transaction message), which would be impossible to sign for.

The question is then what can be changed in a signature that doesn't invalidate it. The known ways for doing so are listed in BIP62 (which aimed to prevent some of them, but was retracted - it still gives a good overview).


  
  Who can change this ID (I assume a miner who mined a block)?
  


Anyone who relays your transaction (including miners), as they see your transaction but have the ability to produce a modified version and relay that one faster than someone else.


  
  What field in the transaction message can be changed to warrant the change of txId?
  


The scriptSig field in the transactions' inputs. It contains the ECDSA signatures, but also redeemscripts, public keys, and various other information needed to prove a spend was authorized.

With BIP141 (Segregated Witness), these issues are avoided by making the signatures not affect the txid anymore. Instead, they are stored in a separate field (called the witness) which is only necessary to prove a transaction's validity, and does not contribute to its effect.