non-ascii password in kerberos authentication

Xu Qiang Qiang.Xu at fujixerox.com
Wed Oct 31 01:40:35 EDT 2007


> -----Original Message-----
> From: Jeffrey Altman [mailto:jaltman at secure-endpoints.com]
> Sent: Wednesday, October 31, 2007 12:22 PM
> To: Xu Qiang
> Cc: Ken Raeburn; krbdev at mit.edu; Su Huang (FXSGSC) Yi
> Subject: Re: non-ascii password in kerberos authentication
> 
> The history of ISO-Latin-9 is that it was created many years after
> ISO-Latin-1 to ISO-Latin-8 had been standardized.  When the Euro was
> created there was an obvious need to add the character, but you can't
> change the standard after it is published and ISO-Latin character sets
> follow the rules of ISO-2022 which prohibits printable 
> characters in the
>  the C1 control character range.  As a result they had to 
> create the new
> ISO-Latin-9 character set to include the Euro character for Western
> Europe by replacing the US Currency symbol.  Since they are different
> characters, they need to be different character sets.
> 
> Microsoft's ANSI character sets are closer in heritage to the IBM Code
> Pages.  IBM CP850 was the Western European character set that included
> all of the characters of ISO-Latin-1 plus the box drawing 
> characters and
> many other characters used within Western Europe that could not fit in
> ISO-Latin-1.  The reason these additional characters could fit in the
> IBM Code Pages is that unlike the ISO-2022 based character 
> sets, the IBM
> Code Pages did not reserve the C1 control character range.
> 
> Microsoft's ANSI character sets like the IBM Code Pages 
> (which Microsoft
> calls OEM Character Sets) do not reserve the C1 control 
> character range
> and therefore there was room to support both the US Currency and Euro
> characters within the ANSI Latin-1 character set.
> 
> For additional historical reference, when the Euro character was
> originally introduced IBM modified CP850 to include it by 
> replacing the
> dotless-i (0xD5) which is used extensively in Turkey.  This produced
> significant backlash which resulted in the introduction of CP858 with
> the Euro character and restoration of the dotless-i to CP850. 
>  However,
> the damage had already been done.  The ISO committees decided against
> repeating IBM's folly.
> 
> Microsoft in its infinite wisdom decided that the OEM Code 
> Pages needed
> replacing and created a matching "ANSI" code page for each of the ISO
> Latin character sets.  The Code Page 1252 is called "ANSI Latin-1" and
> includes all of the characters from ISO Latin-1 at the same 
> code points.
>   However, it also adds a number of characters not found in 
> ISO Latin-1
> and there is not a one-to-one mapping with characters in the OEM Code
> Pages.  The original version of Code Page 1252 did not 
> include the Euro
> character.  Nor did it include the "S with caron" or "Z with caron"
> characters.  These have been added over time and there are still five
> unused code points that can be assigned values at some time 
> in the future.

Jeff, thanks a lot for your detailed information on how the euro symbol comes into 
the character set.

> No it won't.  Your issue is that there is not a one-to-one mapping
> between the code points in the Windows ANSI Latin-1 (CP1252) character
> set and Unicode.  As a result, in order to solve this problem you are
> going to have to implement some way of communicating the character set
> used by your application to the Kerberos library and then replace the
> dumb NUL-stuffing algorithm with one that actually performs a
> character-set translation.
> 
> If you know that your application always uses only a single character
> set, then you could (for your own distribution) bypass the 
> character-set
> communication and simply replace the NUL-stuffing code with
> character-set translation routines for CP1252 to Unicode UCS-2LE.

Yes, I would like to change the NUL-stuffing code a little bit to support the 
euro sign so that it can be used in RC4-encrypted password. 

But for non-developers like me, looking through to find the exact location 
of the NUL-stuffing code is a headache. Just hope that the developers can 
give us some suggestions on how to find those code.

Thanks a lot,
Xu Qiang




More information about the krbdev mailing list