- assigned_to: nobody --> oma-scts
BUG REPORT
User Information
----------------
This is Zahid Anwar from Motorola
Software Version
----------------
SCTS Device Management 1.1.2 February 23, 2005
What is your computer operating system?
---------------------------------------
Microsoft Windows XP
Problem Summary
---------------
We are using SyncML Conformance Test Suite (version D.M
1.1.2) to simulate a SyncML client which synchronizes
with a DM Server using HMAC-MD5 authentication. The
SCTS client's credentials are different from what is
expected.
We investigated further to figure out why.
We wrote our own code using Java Crypto Libraries (JCE)
1.5 to calculate B64, MD5 for some value of username
and password. For the same username and password, the
credential calculator from within SCTS gives a
different value. However, using the MD5 source code
from SCTS (under the Authentication subproject), we
found that the internal MD5 calculations match those
from JCE. Therefore, SCTS outputs incorrect values (in
spite of the internal MD5 calculation being correct).
JCE values were also confirmed using other MD5
calculator tools, (e.g.
http://bfl.rctek.com/tools/?tool=hasher.
Problem Detail
--------------
According to the "SyncML Device Management Security,
version 1.1.1" 2002-10-02, section 7.2 the HMAC should
be computed as follows
H(B64(H(username:password)):nonce:B64(H(message body)))
for the client to DM-server authentication.
This test does not pass because the hash comes out as
inconsistent.
How to Reproduce it
-------------------
Download source code and calculate MD5, base64 using
the headers MD5.h and MD5Authenticator.cpp. Use a small
C++ test script like follows
#include "MD5.h"
#include "stdio.h"
#include <string.h>
int main()
{
char buffer[20];
const char * userId = "foo";
const char * pwd = "bar";
MD5_CTX md5Context;
char md5Digest[16];
/* Construct the auth string - userID:m_pchPassword */
strcpy(buffer,userId);
strcat(buffer,":");
strcat(buffer,pwd);
MD5Init(&md5Context);
MD5Update(&md5Context,buffer,(int)strlen(buffer));
MD5Final(md5Digest,&md5Context);
for (int i = 0; i < 16; i++) {
printf("%02x", md5Digest[i]);
}
return 1;
}
The actual digest comes out to be: 4e 99 e8 c1 2d e7 e0
15 35 24 8d 2b ac 85 e7 32
However if this is typed in the credential calculator
in the user name and password textboxes respectively
the MD5 by the calculator is: 79 84 B5 AD 7D 5F 34 C6
88 1A 60 F7 87 8F B4 61
The same incorrect MAC is computed for challenge
response sent by the DM server.
Can you reproduce it?
---------------------
Yes, Always