Every effort has been made to ensure the accuracy of this document. However, please note that, by the nature of reverse engineering, it may contain inaccurate results.
Unless otherwise noted, this document assumes the following.
FeliCa is used for many stored-fare (SF) electronic money schemes and identification cards, most notably transit IC cards. Yet the most important part of its specification, the part concerning cryptography, is kept confidential and is not widely known. The security of a cryptographic system is only assured once it has been made public and scrutinised by a broad range of experts. For this reason, this document reveals the hidden specifications of FeliCa. It draws heavily on JIS X 6319-4[1], the FeliCa Card User’s Manual Excerpted Edition (hereafter U-MAN)[2], felica-tool[4] and Proxmark3[3]. Readers who want more detail are encouraged to consult these as well.
FeliCa is a contactless IC card technology developed by Sony Corporation, also known as NFC Type-F. The implementations available on the market are FeliCa Standard and FeliCa Lite-S. This document covers the former.
This chapter describes the communication protocol between a card and a Reader/Writer. The physical layer and the data link layer are omitted because they are fully public; only the application layer is covered.
The data structure of a command packet is shown below. (Table 3.1)
| Offset | Length | Item |
|---|---|---|
| 0x00 | 0x01 | Command Code |
| 0x01 | Variable | Command Data |
A one-byte value that identifies the type of the command.
Data that specifies how the command is to be processed. Its format differs from command to command.
The data structure of a response packet is shown below. (Table 3.2)
| Offset | Length | Item |
|---|---|---|
| 0x00 | 0x01 | Response Code |
| 0x01 | Variable | Response Data |
An eight-bit value that identifies the type of the response.
Data that specifies the result of processing the command. Its format differs from command to command.
An overview of each command, together with its Command Code and Response Code, is shown below. (Table 3.3) In the table, the Command Code is written as CC and the Response Code as RC. Note that commands which are not yet known may exist.
This section describes the manufacture ID (IDm) and the manufacture parameter (PMm), which are obtained as the response data of the Polling command.
The IDm is the ID with which a Reader/Writer identifies a card. When a card contains several Systems, each System has a different IDm.
The data structure of the IDm is shown below. (Table 3.4) Note that the upper four bits of the first byte of the manufacturer code indicate the System number within the card.
| Offset | Length | Item |
|---|---|---|
| 0x00 | 0x02 | Manufacturer code |
| 0x02 | 0x06 | Card identification number |
The data structure of the PMm is shown below. (Table 3.5) The ROM type and the IC type together are called the IC code.
| Offset | Length | Item |
|---|---|---|
| 0x00 | 0x01 | ROM type |
| 0x01 | 0x01 | IC type |
| 0x02 | 0x06 | Maximum response time parameter |
Internally, FeliCa has a hierarchical structure consisting of Systems, Areas, Services and Blocks. A System contains Areas, an Area contains Sub-Areas or Services, and a Service contains Blocks. Any of these may exist more than once on a single card. Of these, Systems, Areas and Services are metadata resembling directories, while Blocks are the regions that hold the actual data. Collectively they are called Nodes. Each Node has a code that represents it. The existence of any Node consumes Blocks.
A System is a logical card unit and sits at the top of the hierarchy. The code that represents a System (as a Node) is 0xFFFF. The following System Definition Information is defined for a System.
A System Code is a two-byte value. Confusingly, the code that represents a System (as a Node) and the System Code are different concepts. Examples of System Codes are shown below. (Table 4.1)
| System Code | Name |
|---|---|
| 0x0003 | Japan Railway Cybernetics Area |
| 0x80CD | Free Area |
| 0xFE00 | Common Area |
| 0xFE0F | Management Area |
The Issue ID information consists of the issue ID (IDi) and the Issue Parameter (PMi), each eight bytes long. It can be obtained from the response data once mutual authentication has succeeded with the Authentication2 command or the Authentication2 v2 command. Converting the IDi into a string with a particular algorithm yields the ID number printed at the bottom right of the back of a transit IC card conforming to the Japan Railway Cybernetics standard.
A System Key is an eight-byte value under DES, and a sixteen-byte value under AES.
A System Key Version is a two-byte value.
Details unknown.
When a card receives a Polling command, or receives a command packet addressed to an IDm other than that of the System currently being operated, the System currently being operated is switched and reset to Mode0. However, when the Authentication1, Authentication1 v2 or Internal Authenticate and Read command succeeds and System switching occurs, the card enters Mode1.
An Area is contained in a System or in at least one parent Area. The following Area Definition Information is defined for an Area.
An Area Code is a two-byte value. Bits 6 to 15 give the Area Number and bits 0 to 5 give the Area Attribute (Table 4.2). The Area Code also indicates the logical start point of the Area within the card.
| Area Attribute | Value |
|---|---|
| Area in which Sub-Areas can be created | 0b000000 |
| Area in which Sub-Areas cannot be created | 0b000001 |
The logical end point of the Area within the card.
The number of Blocks allocated to the Area.
An Area Key is an eight-byte value under DES, and a sixteen-byte value under AES.
An Area Key Version is a two-byte value.
Details unknown.
A System always contains Area 0, whose range is 0x0000 to 0xFFFE.
A Service is contained in at least one Area. The following Service Definition Information is defined for a Service.
A Service Code is a two-byte value. Bits 6 to 15 give the Service Number and bits 0 to 5 give the Service Attribute (Table 4.3). The Service Code also indicates the logical position of the Service within the card.
The number of Blocks allocated to the Service.
A Service Key is an eight-byte value under DES, and a sixteen-byte value under AES.
A Service Key Version is a two-byte value.
Set only on products equipped with the Value-Limited Purse Service option or the Communication with MAC option.
Managing the same group of Blocks with more than one Service Code is called overlapping, and a Service that overlaps a Service having the same Service Number within the same System is called an Overlap Service. The figure showing an example of an Overlap Service, in the ”Overlap Service” section of U-MAN[2], aids understanding.
A Block is the actual data in the non-volatile memory of a card, divided into sixteen-byte units. Apart from those that hold metadata, a fixed number of Blocks is allocated to each Service, and the Area containing the Service manages the total allocation. The figure showing how Blocks are managed by Area, in the ”Area” section of U-MAN[2], aids understanding.
A card has states called Modes, from Mode0 to Mode3. The commands that the card can execute are restricted by the Mode. When power is supplied after a power-off state, the card enters Mode0. Mode1 and above are divided into DES, AES and Communication with MAC; executing the Authentication1, Authentication1 v2 or Internal Authenticate and Read command respectively takes the card to Mode1.
Under DES and AES, executing the Authentication2 or Authentication2 v2 command in Mode1 takes the card to Mode2 of the corresponding scheme. In Mode2 the commands that require mutual authentication (Read, Write, Read v2, Write v2 and so on) can be executed. Executing an issuance command takes the card to Mode3 of the corresponding scheme.
Communication with MAC, on the other hand, has neither Mode2 nor Mode3. The command that can be executed in Mode1 is External Authenticate and Write, and executing it returns the card to Mode0.
Once the card has left Mode0 it no longer accepts the Polling command. However, a Polling command that specifies another System in order to perform Switching between Systems can be executed in any Mode. The Reset Mode command also returns the card to Mode0 from any Mode. The current Mode can be checked with the Request Response command. For further detail, see the ”Mode” section of U-MAN[2].
This chapter describes the parameters given to commands and the details of each command. Because of space constraints, the details of some commands are omitted.
A Block List is a set of Block List Elements that identify the Service and the Block Number to be accessed. A Block List Element is either two bytes long (Table 6.1) or three bytes long (Table 6.2). Note that the offsets and lengths in these two tables are given in bits.
| Offset | Length | Item |
|---|---|---|
| 0 | 1 | Length (0b1) |
| 1 | 3 | Access Mode |
| 4 | 4 | Service Code List Order |
| 8 | 8 | Block Number / Key Version |
| Offset | Length | Item |
|---|---|---|
| 0 | 1 | Length (0b0) |
| 1 | 3 | Access Mode |
| 4 | 4 | Service Code List Order |
| 8 | 16 | Block Number / Key Version (little endian) |
Specifies how the Node targeted by the Block List Element is accessed. (Table 6.3)
| Access Mode | Value |
|---|---|
| Other than Cashback Access to a Purse Service | 0b000 |
| Cashback access to a Purse Service | 0b001 |
| Key change | 0b100 |
The Polling command is used by a Reader/Writer to capture and identify a card. The IDm and PMm of the System having the specified System Code can be obtained.
The data structure of the Polling command packet is shown below. (Table 6.4)
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x01 | Command Code | 0x00 |
| 0x01 | 0x02 | System Code (x) | 0x0000 ≤ x ≤ 0xFFFF (0xFF in either byte is a wildcard). Big endian |
| 0x03 | 0x01 | Request Code | 0x00: no request, 0x01: System Code request, 0x02: communication performance request |
| 0x04 | 0x01 | Time Slot | Specifies the maximum number of Time Slots that may respond. 0x00, 0x01, 0x03, 0x07, 0x0F (for details see the table of Time Slot specifications in the ”Polling” section of U-MAN[2]) |
The data structure of the Polling response packet is shown below. (Table 6.5)
If a Request Code that is not supported is specified, no Request Data is appended to the response packet. Implementations must assume that Request Data may not be returned even when a Request Code is specified.
The Request Service command checks the existence of Areas and Services and obtains their Key Versions.
The data structure of the Request Service command packet is shown below. (Table 6.6)
The data structure of the Request Service response packet is shown below. (Table 6.7)
The Request Response command checks the presence and the Mode of a card.
The data structure of the Request Response command packet is shown below. (Table 6.8)
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x01 | Command Code | 0x04 |
| 0x01 | 0x08 | IDm | - |
The data structure of the Request Response response packet is shown below. (Table 6.9)
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x01 | Response Code | 0x05 |
| 0x01 | 0x08 | IDm | - |
| 0x09 | 0x01 | Mode (n) | 0x00 ≤ n ≤ 0x03 |
The Read Without Encryption command reads Block Data from a Service whose Service Attribute requires no authentication.
The data structure of the Read Without Encryption command packet is shown below. (Table 6.10)
The data structure of the Read Without Encryption response packet is shown below. (Table 6.11)
The Write Without Encryption command writes Block Data to a Service whose Service Attribute requires no authentication.
The data structure of the Write Without Encryption command packet is shown below. (Table 6.12)
The data structure of the Write Without Encryption response packet is shown below. (Table 6.13)
The Search Service Code command obtains Area Codes and Service Codes.
The data structure of the Search Service Code command packet is shown below. (Table 6.14)
The data structure of the Search Service Code response packet is shown below. (Table 6.15)
The Nodes in a card can be enumerated by executing this command while incrementing the Node index from 0, treating the point at which the Node code in the response becomes 0xFFFF as the end.
The Request System Code command obtains the System Codes registered in a card.
The data structure of the Request System Code command packet is shown below. (Table 6.16)
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x01 | Command Code | 0x0C |
| 0x01 | 0x08 | IDm | - |
The data structure of the Request System Code response packet is shown below. (Table 6.17)
The Request Block Information command obtains the number of Blocks allocated to the specified Nodes. It is supported by mobile FeliCa only.
The data structure of the Request Block Information command packet is shown below. (Table 6.18)
The data structure of the Request Block Information response packet is shown below. (Table 6.19)
The Authentication1 command starts the card-side authentication challenge under DES.
For the data structure of the Authentication1 command packet, see Table 7.1.
For the data structure of the Authentication1 response packet, see Table 7.3.
The Authentication2 command completes DES mutual authentication.
For the data structure of the Authentication2 command packet, see Table 7.2.
For the data structure of the Authentication2 response packet, see Table 7.4.
The Read command reads Block Data in a DES session established after mutual authentication.
For the structure of the internal payload of the Read command before encryption, see Table 7.12.
For the structure of the internal payload of the Read response before encryption, see Table 7.13.
The Write command writes Block Data in a DES session established after mutual authentication.
For the structure of the internal payload of the Write command before encryption, see Table 7.14. For the key change package stored in the Block Data when the Access Mode is 0b100 (key change), see Table 7.16 and the generation algorithm in the same section.
For the structure of the internal payload of the Write response before encryption, see Table 7.15.
The Get Node Property command obtains Node Property. The Node Property of the Value-Limited Purse Service option or of the Communication with MAC option can be obtained. This command is implemented only on some AES card products and AES/DES card products.
The data structure of the Get Node Property command packet is shown below. (Table 6.20)
The data structure of the Get Node Property response packet is shown below. (Table 6.21)
The data structure of the Node Property when 0x00 (Value-Limited Purse Service) is specified as the target is shown below. (Table 6.22)
When 0x01 (Communication-with-MAC-enabled Service) is specified as the target, the Node Property is a single byte holding the Communication with MAC flag. A value of 0x01 means enabled and 0x00 means disabled.
The Request Service v2 command obtains the Encryption Identifier and Key Version information.
The data structure of the Request Service v2 command packet is shown below. (Table 6.23)
The data structure of the Request Service v2 response packet is shown below. (Table 6.24)
The Get System Status command obtains the configuration state of each System.
The data structure of the Get System Status command packet is shown below. (Table 6.25)
The data structure of the Get System Status response packet is shown below. (Table 6.26)
The meaning of the flag and of the data is unknown.
The Request Specification Version command obtains the version of the card OS.
The data structure of the Request Specification Version command packet is shown below. (Table 6.27)
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x01 | Command Code | 0x3C |
| 0x01 | 0x08 | IDm | - |
| 0x09 | 0x02 | Reserved | 0x0000 |
The data structure of the Request Specification Version response packet is shown below. (Table 6.28)
The assignment of each element of the Option Version List is shown below. (Table 6.29)
The Basic Version and each option version are two-byte values. The upper four bits are fixed at 0b1000 and the remaining twelve bits give the version value in BCD. For example, version 5.0.0 is 0x500. Which options are present and what their version values are differ from product to product.
The Reset Mode command resets the Mode to Mode0.
The data structure of the Reset Mode command packet is shown below. (Table 6.30)
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x01 | Command Code | 0x3E |
| 0x01 | 0x08 | IDm | - |
| 0x09 | 0x02 | Reserved | 0x0000 |
The data structure of the Reset Mode response packet is shown below. (Table 6.31)
The Authentication1 v2 command starts the card-side authentication challenge under AES.
For the data structure of the Authentication1 v2 command packet, see Table 7.6.
For the data structure of the Authentication1 v2 response packet, see Table 7.8.
The Authentication2 v2 command completes AES mutual authentication.
For the data structure of the Authentication2 v2 command packet, see Table 7.7.
For the data structure of the Authentication2 v2 response packet, see Table 7.9.
The Read v2 command reads Block Data in an AES session established after mutual authentication.
For the structure of the internal payload of the Read v2 command before encryption, see Table 7.12.
For the structure of the internal payload of the Read v2 response before encryption, see Table 7.13.
The Write v2 command writes Block Data in an AES session established after mutual authentication.
For the structure of the internal payload of the Write v2 command before encryption, see Table 7.14. Key change (Access Mode 0b100) is not valid for Write v2.
For the structure of the internal payload of the Write v2 response before encryption, see Table 7.15.
The Register Issue ID command is an issuance secure command that registers information related to the issue ID.
For the structure of the internal payload of the Register Issue ID command before encryption, see Table 7.17.
In addition to Status Flag1 and Status Flag2, the internal payload of the Register Issue ID response before encryption returns the number of remaining Blocks (two bytes) on success only.
The Register Area command is an issuance secure command that registers an Area.
For the structure of the internal payload of the Register Area command before encryption, see Table 7.18.
The internal payload of the Register Area response before encryption is the two bytes of Status Flag1 and Status Flag2.
The Register Service command is an issuance secure command that registers a Service.
For the structure of the internal payload of the Register Service command before encryption, see Table 7.19.
In addition to Status Flag1 and Status Flag2, the internal payload of the Register Service response before encryption returns the number of remaining Blocks (two bytes) on success only.
The Change System Block command is an issuance secure command that commits the results of issuance commands.
For the structure of the internal payload of the Change System Block command before encryption, see Table 7.20.
The internal payload of the Change System Block response before encryption is the two bytes of Status Flag1 and Status Flag2.
Status Flag is the value that represents the result of processing a command. It consists of Status Flag1 (1 byte) and Status Flag2 (1 byte).
Status Flag1 indicates whether the command succeeded, and the Block position or Service position at which an error occurred. (Table 6.32)
There are two ways in which the position of the error is represented, depending on the product, and the value of Status Flag1 alone does not tell which one is in use. (Table 6.33) For example, when an error occurs at the Node specified tenth in the Block List, the ordinal form returns 0x0A whereas the bitmap form returns 0x02.
Status Flag2 indicates the detail of the error. (Table 6.34) There are also card-specific values, which are not common to all products. (Table 6.35)
Because 0x71 is a warning, the write itself is performed. The limit on the number of rewrites differs from product to product, and in this case Status Flag1 is 0x00 on some products and 0xFF on others.
The data structure of the Authentication1 command packet is shown below. (Table 7.1)
The data structure of the Authentication2 command packet is shown below. (Table 7.2)
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x01 | Command Code | 0x12 |
| 0x01 | 0x08 | IDm | - |
| 0x09 | 0x08 | Challenge 2B | 8 bytes |
The data structure of the Authentication1 response packet is shown below. (Table 7.3)
The data structure of the Authentication2 response packet is shown below. (Table 7.4) This response contains no IDm, and everything after the Response Code is encrypted.
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x01 | Response Code | 0x13 |
| 0x01 | 0x20 | Encrypted payload | Encrypted with DES-CBC (IV = 0) keyed with the random number R2. For the structure after decryption, see Table 7.5 |
The data structure of the payload after decryption is shown below. (Table 7.5)
The principal parameters used in DES mutual authentication are derived as follows.
Let the System Key be Ksys, the sequence of Area Keys be KArea,i and the sequence of Service Keys be Ksrv,j. Then


give the group Service Key Kgroup and the user Service Key Kuser.
Treating the IDm as an eight-byte vector, compute


Random numbers are exchanged with two-key 3DES, in the key order K1, K2, K1. Letting R1 and R2 be the random numbers,


The plaintext of Authentication2 is

Here the TID is the last six bytes of R1. The data used as the Issue ID information is the last sixteen bytes, IDi(8) ∥ PMi(8).
The data structure of the Authentication1 v2 command packet is shown below. (Table 7.6)
The data structure of the Authentication2 v2 command packet is shown below. (Table 7.7)
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x01 | Command Code | 0x42 |
| 0x01 | 0x08 | IDm | - |
| 0x09 | 0x10 | Challenge 2B | 16 bytes |
The data structure of the Authentication1 v2 response packet is shown below. (Table 7.8)
The data structure of the Authentication2 v2 response packet is shown below. (Table 7.9) This response contains no IDm either. Only the transaction number is in cleartext; the payload and the MAC are encrypted.
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x01 | Response Code | 0x43 |
| 0x01 | 0x02 | Transaction number (TN) | Little endian. Not encrypted |
| 0x03 | 0x10 | Encrypted payload | Encrypted with AES-128-OFB. For the structure after decryption, see Table 7.10 |
| 0x13 | 0x08 | Encrypted MAC | Encrypted with the later part of the same OFB stream |
The data structure of the payload after decryption is shown below. (Table 7.10)
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x08 | Issue ID (IDi) | - |
| 0x08 | 0x08 | Issue Parameter (PMi) | - |
The principal parameters used in AES mutual authentication are derived as follows.
Let the sixteen-byte constant be I0 = (01 01 00
00 80) and the
sequence of Node Keys be KNode,j. Then

gives the group key Kgroup.
With the group key Kgroup and the individualisation code Kind, compute

Define the sixteen-byte context Block B(prefix,IDm) as
![B [0..1] = prefix, B [2..5] = 0, B [6..13] = IDm, B[14..15] = 0x01 0x00](card_usersmanual10x.png)
and obtain
![α = AESH (B ([0x01, 0x02],IDm ))](card_usersmanual11x.png)
![β = AESH (B ([0x02,0x02 ],IDm ))](card_usersmanual12x.png)
From challenge 3C (four bytes), form

and generate and verify the authentication values with


The TID used in secure messaging is derived from R1 as
![TID = R1[2..7]](card_usersmanual16x.png)
(six bytes, from the third to the eighth byte, counting the first byte as 0).
The decrypted payload of the Authentication2 v2 response is

After Authentication2 v2 succeeds, the session keys are derived from R2.


Read, Write, Read v2 and Write v2 carry internal payloads of identical form inside the encrypted secure frame. The only difference is the encryption scheme.
| Command | Scheme | Payload structure |
|---|---|---|
| Read | DES | Common to the Read family (Table 7.12 and Table 7.13) |
| Read v2 | AES | Common to the Read family (Table 7.12 and Table 7.13) |
| Write | DES | Common to the Write family (Table 7.14 and Table 7.15) |
| Write v2 | AES | Common to the Write family (Table 7.14 and Table 7.15) |
To perform a DES key change with the Write command, set the Access Mode of the Block List Element to 0b100 (key change) and store the sixteen-byte key change package in the Block Data.
The parent key is the Area Key of the parent Area that contains the node whose key is being changed. When a Service Key is changed it is the Area Key of the Area that contains that Service, and when an Area Key is changed it is the Area Key of its parent Area.
When the System Key is changed, the System is at the top of the hierarchy and no parent Area contains it. In this case the System Key being changed, that is the old key, serves as the parent key (Kparent = Kold). The node code of the System, 0xFFFF, must also be included in the Service Code List of the mutual authentication so that the Service Code List Order of the Block List Element can address the System.
Let the parent key be Kparent, the old key Kold, the new key Knew and the new Key Version v. First build the eight-byte version Block V as

then compute the following.



In use, the following pair is passed to the Write command for each key to be changed.
When changing several keys at once, arrange the Block List and the Block Data so that their orders match. On failure, Status Flag2 may be, for example, 0xAA (key change failed) or 0xAB (invalid package MAC).
In a DES session, the payload before encryption is

This is padded to an eight-byte boundary by any method to give P′, a MAC is appended, and the result is encrypted with DES-CBC (IV = 0).
The MAC is computed as follows.
![M = [Len, Code, 0, 0, 0, 0, 0, 0]
0](card_usersmanual25x.png)

Here Bi is the sequence of eight-byte Blocks of P′ and Len = 2 + |P′| + 8. The final value Mn is appended as the MAC (eight bytes).
The response is decrypted, its MAC is verified, the trailing eight-byte MAC is removed and then the padding is removed. The TID must also match and the TN must increase monotonically.
In an AES session, the transmitted data is

The payload itself is encrypted with OFB, and the MAC is encrypted with the later part of the same OFB stream.
The initialisation vector IV (sixteen bytes) is built as follows.
![IV[0] = 0x01, IV [1] = FrameLen, IV[2] = Code,](card_usersmanual28x.png)
![IV [3..4] = TN, IV[5..10] = TID,](card_usersmanual29x.png)
![IV [11..13] = C3C[1..3], IV [14..15] = 0](card_usersmanual30x.png)
The MAC plaintext is computed with AES-CMAC, of which the first eight bytes are used.
![B0[0] = 0x19, B0 [1..13] = IV [1..13], B0[14..15] = |P ayload|BE16](card_usersmanual31x.png)
![M AC = CMACKmac (B0 ∥ P ayload )[0..7]](card_usersmanual32x.png)
During OFB encryption, if the payload length is not a multiple of sixteen, the keystream is consumed up to the next sixteen-byte boundary before the MAC is encrypted.
Register Issue ID, Register Area, Register Service and Change System Block are sent and received as DES secure commands. The structures of their internal payloads before encryption are shown below.
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x00 | None | No payload |
The data structures of the internal payloads of the responses are shown below.
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x01 | Status Flag1 | 0x00: normal |
| 0x01 | 0x01 | Status Flag2 | 0x00: normal |
| Offset | Length | Item | Value or remarks |
|---|---|---|---|
| 0x00 | 0x01 | Status Flag1 | 0x00: normal |
| 0x01 | 0x01 | Status Flag2 | 0x00: normal |
The plaintext of an issuance package (before encryption) is sixteen bytes long. Its format for each command is as follows.
The package key is the Area Key of the parent Area that contains the node being issued. That is, it is the Area Key of the parent Area in which the Area is created for the Register Area command, the Area Key of the Area in which the Service is created for the Register Service command, and the Area Key of Area 0 for the Register Issue ID command.
Let the package key be Kpkg and the plaintext package be P (where |P| must be a non-zero multiple of eight).
Build the MAC generation key as

Compute

and take the last eight bytes as MACpkg.
Compute

and store this ciphertext in the package field of the command.
Japanese Standards Association. JIS X 6319-4:2016 Specification of implementation for integrated circuit(s) cards – Part 4: High speed proximity cards. 2016.
Sony Corporation. FeliCa Card User’s Manual Excerpted Edition. Version 2.31. 2026. url: https://www.sony.co.jp/en/Products/felica/business/tech-support/data/card_usersmanual_2.3e.pdf (visited on 07/23/2026).
C. Herrmann et al. Proxmark3 – Iceman repo. https://github.com/RfidResearchGroup/proxmark3.
kormax. GitHub - kormax/felica-tool: Application for analyzing characteristics of FeliCa cards. 2025. url: https://github.com/kormax/felica-tool (visited on 05/28/2025).