3.4.5.2 SIGNKEY

If extended session security is not negotiated (section 2.2.2.5), then no signing keys are available and message signing is not supported.

If extended session security is negotiated, the signing key is a 128-bit value that is calculated as follows from the random session key and the null-terminated ASCII constants shown.

Input:

  • ExportedSessionKey - A randomly generated session key.

  • NegFlg - Defined in section 3.1.1.

  • Mode - An enum that defines the local machine performing the computation.  Mode always takes the value "Client" or "Server".

Output:

  • SignKey - The key used for signing messages.

Functions used:

  • ConcatenationOf(), MD5(), NIL - Defined in section 6.

      
     Define SIGNKEY(NegFlg, ExportedSessionKey, Mode) as
     If (NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY flag is set in NegFlg) 
          If (Mode equals "Client")
               Set SignKey to MD5(ConcatenationOf(ExportedSessionKey, 
               "session key to client-to-server signing key magic  
               constant"))
          Else
               Set SignKey to MD5(ConcatenationOf(ExportedSessionKey, 
               "session key to server-to-client signing key magic
               constant"))
          Endif
     Else 
          Set  SignKey to NIL
     Endif
     EndDefine