A method for establishing mutual authentication between a first software layer and a second software layer of an application on a computing device using a data encryption key derived based on a first nonce generated by the first software layer and a second nonce generated by the second software layer, the method comprising, during an initialization of the application, the steps of: generating, by the first software layer, the first nonce and sending the generated first nonce to the second software layer; receiving, by the first software layer, the second nonce from the second software layer; and storing, by the first software layer, encrypted binding information comprising the received second nonce; the method further comprising, during runtime of the application, the steps of: retrieving, by the first software layer, the binding information stored by the first software layer during the initialization of the application; decrypting, by the first software layer, the binding information to obtain the second nonce; receiving, by the first software layer, an encrypted first nonce from the second software layer of the application; decrypting, by the first software layer, the encrypted first nonce to obtain the first nonce; deriving, by the first software layer, a data encryption key based on the obtained first nonce and the obtained second nonce; and encrypting, by the first software layer, data being sent from the first software layer to the second software layer using the data encryption key. generating, by the first software layer, the first nonce and sending the generated first nonce to the second software layer; receiving, by the first software layer, the second nonce from the second software layer; and storing, by the first software layer, encrypted binding information comprising the received second nonce; the method further comprising, during runtime of the application, the steps of: retrieving, by the first software layer, the binding information stored by the first software layer during the initialization of the application; decrypting, by the first software layer, the binding information to obtain the second nonce; receiving, by the first software layer, an encrypted first nonce from the second software layer of the application; decrypting, by the first software layer, the encrypted first nonce to obtain the first nonce; deriving, by the first software layer, a data encryption key based on the obtained first nonce and the obtained second nonce; and encrypting, by the first software layer, data being sent from the first software layer to the second software layer using the data encryption key. retrieving, by the first software layer, the binding information stored by the first software layer during the initialization of the application; decrypting, by the first software layer, the binding information to obtain the second nonce; receiving, by the first software layer, an encrypted first nonce from the second software layer of the application; decrypting, by the first software layer, the encrypted first nonce to obtain the first nonce; deriving, by the first software layer, a data encryption key based on the obtained first nonce and the obtained second nonce; and encrypting, by the first software layer, data being sent from the first software layer to the second software layer using the data encryption key.