* 仕様書

[REFS[
- [1] [CITE@en[RFC 7613 - Preparation, Enforcement, and Comparison of Internationalized Strings Representing Usernames and Passwords]] ([TIME[2015-10-23 06:11:01 +09:00]] 版) <https://tools.ietf.org/html/rfc7613#section-3>
]REFS]

* 意味

[2] [DFN[[RUBYB[[[利用者名]]]@en[username]]]]は、
[[RFC 3629]] [[UTF-8]] で[[符号化]]された [[Unicode符号位置]]の[[文字列]]で、
[CODE[[[userpart]]]] の1つ[[以上]]の順序付きの列として構造化されたものです [SRC[>>1]]。

[3] [DFN[[CODE[[[userpart]]]]]] は、
[CODE[[[IdentifierClass]]]] で認められる[[符号位置]]のみ含む[[文字列]]です [SRC[>>1]]。

[4] [CODE[[[userpart]]]] 間には [CODE(charname)@en[[[SPACE]]]] の1つ[[以上]]の列を区切りとして挿入する必要があります
[SRC[>>1]]。

[7] [[利用者名]]は、 ([[正規化]]と[[写像]]の適用後に) [[空文字列]]となっては[['''なりません''']]
[SRC[>>1]]。

[FIG(railroad)[
= [CODE[[[userpart]]]]
= *
== +
=== [CODE(char)[[[U+0020]]]]
== [CODE[[[userpart]]]]
]FIG]

* 大文字と小文字

[9] [[大文字]]と[[小文字]]を区別しない[[プロファイル]] [CODE[[[UsernameCaseMapped]]]]
と区別する[[プロファイル]] [CODE[[[UsernameCasePreserved]]]]
が定義されています。

[10] [[IETF]] は一般的には区別しないのが[RUBYB[好ましい]@en[preferable]]と考えています
[SRC[>>1]]。

* 関連

[5] [[SASLprep]] で [[Prohibited Output]] とされていた[[符号位置]]は、
[CODE[[[IdentifierClass]]]] でも認められません [SRC[>>1]]。

[6] [[RFC 7542]] [[Network Access Identifier]] の [CODE[user@example.com]]
型の構造も、[[利用者名]]として用いることができます [SRC[>>1]]。

[8] [[利用者名]]を[[ハッシュ関数]]その他の暗号アルゴリズムへの入力として使う場合には、
そのアルゴリズムに与える前に [CODE[[[UsernameCaseMapped]]]]
や [CODE[[[UsernameCasePreserved]]]] を[[執行]]する必要があります [SRC[>>1]]。