RFC 3244
Microsoft Windows 2000 Kerberos Change Password and Set Password Protocols
RFC 3244: Microsoft Windows 2000 Kerberos Change Password and Set Password Protocols π
Okay bestie, this is RFC 3244, and it's giving Kerberos glow-up π Here's the title block tea β¨
- Title: Microsoft Windows 2000 Kerberos Change Password and Set Password Protocols
- Authors: Mike Swift (University of Washington), Jonathan Trostle (Cisco Systems), and John Brezak (Microsoft) π―
- Category: Informational π
- Date: February 2002 πΈ
- Obsoletes and updates: the title block doesn't list anything it obsoletes or updates π
The authors' addresses are at the very end, in Section 5 π
Status of this Memo π§Ύ
This memo is here to give info to the Internet community. It is NOT a standard of any kind, and it can be shared as much as you like π¦
Copyright Notice Β©
Copyright (C) The Internet Society (2002). All Rights Reserved.
Abstract π
Okay so this memo lays out Microsoft's Windows 2000 Kerberos change password and set password protocols π₯ The Windows 2000 version works with the original Kerberos change password protocol, which is so iconic of it. The whole vibe is a request and reply protocol where a KRB_PRIV message carries the user's new password π
1. Introduction β¨
Bestie, the Windows 2000 change password protocol plays nicely with the original Kerberos one π«Ά It's still a request and reply setup, with a KRB_PRIV message holding the new password for the user.
The catch is that the original protocol doesn't let an admin set a password for a brand new user π That's a real need in some setups, so this proposal extends the change password protocol to allow password setting. Here's what changes:
- New fields are added to the request message so it can say which principal is getting its password set π―
- The initial flag in the service ticket is not required anymore π ββοΈ
- A new protocol version number is used π’
- Three new result codes are added π
2. The Protocol π₯
The service takes requests on UDP port 464, and TCP port 464 too π The protocol is one request message, followed by one reply message. For UDP, each message must be fully contained in a single UDP packet.
For TCP, there's a 4 octet header in network byte order that comes right before the message. It tells you how long the message is π
Request Message
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| message length | protocol version number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| AP_REQ length | AP_REQ data /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ KRB-PRIV message /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
All 16 bit fields are big-endian, so that's the rule for the whole request π
- message length: the total number of bytes in the message, counting this field too π¦
- protocol version number: the hex constant
0xff80(big-endian integer) π§ - AP-REQ length: how many bytes the AP-REQ data is. If the length is zero, the last field holds a KRB-ERROR message instead of a KRB-PRIV message π¬
- AP-REQ data (see [1]): this AP-REQ must be for the service principal
kadmin/changepw@REALM, where REALM is the realm of the user who wants to change or set their password ποΈ The authenticator in the AP-REQ must include a subsession key. NOTE: the subsession key must be pseudo-randomly generated and must never be reused for multiple authenticators β οΈ Setting passwords doesn't require the initial flag to be set in the Kerberos service ticket π - KRB-PRIV message (see [1]): the user-data field in the KRB-PRIV message is encrypted with the subkey from the authenticator in the AP-REQ data π The usec and seq-number fields of the KRB_PRIV message are present, and they have the same value as the seq-number field in the authenticator from the AP_REQ message (the seq-number in the authenticator will be present). The server ignores the optional r-address field in the KRB_PRIV message if it shows up π
The user-data part of the message is this ASN.1 structure, encoded as an OCTET STRING π§©
ChangePasswdData ::= SEQUENCE {
newpasswd[0] OCTET STRING,
targname[1] PrincipalName OPTIONAL,
targrealm[2] Realm OPTIONAL
}
Now the server's job, which is a lot π The server must verify the AP-REQ message, check whether the client principal in the ticket is authorized to set or change the password (either for that principal, or for the principal in the targname field if it's there), and decrypt the new password. The server also checks whether the initial flag is required for this request. If it isn't set and should be, the server replies with status 0x0007 π« If the authorization fails, the server responds with status 0x0005 π ββοΈ For forward compatibility, the server should be prepared to ignore any fields after targrealm in the structure that it doesn't understand π¦
The newpasswd field holds the cleartext password. The server applies any local policy checks, including password policy checks π‘οΈ Then it generates the right keytypes from the password and stores them in the KDC database π If all goes well, status 0x0000 gets sent back to the client in the reply message (see below) π₯³
Part 2 is coming next with the Reply Message, the result codes, the Security Considerations, the References, and the Authors' Addresses, so stay tuned ππ«Ά
6. Full Copyright Statement π
Okay so bestie, this part is the legal stuff at the very end, and it's giving "please don't mess with this doc" energy π Here's the vibe.
Copyright (C) The Internet Society (2002). All Rights Reserved. πΈ
You're allowed to copy this document and share it with others, and you can make derivative works that comment on it, explain it, or help people implement it. You can publish and distribute those too, in whole or in part, with no real restrictions, as long as the copyright notice and this paragraph stay on every copy and derivative work π«Ά BUT the document itself can't be changed in any way. You can't remove the copyright notice or the references to the Internet Society or other Internet organizations. The only exceptions are if you need it for developing Internet standards (then the Internet Standards process copyright procedures have to be followed π), or if you're translating it into a language other than English π
The permissions above are perpetual, which means the Internet Society and its successors or assigns won't take them back β¨
This document and the info in it is provided on an "AS IS" basis, and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED π That includes (but isn't limited to) any warranty that using the information won't infringe any rights, and any implied warranties of merchantability or fitness for a particular purpose. Not gonna lie, that's a lot of "no promises" energy π
Acknowledgement π§
Funding for the RFC Editor function is currently provided by the Internet Society. π
π¦ where this page comes from
- ietf: rfc3244 2002-02
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms