153a5a1b3Sopenharmony_ci 253a5a1b3Sopenharmony_ci 353a5a1b3Sopenharmony_ci 453a5a1b3Sopenharmony_ci 553a5a1b3Sopenharmony_ci 653a5a1b3Sopenharmony_ci 753a5a1b3Sopenharmony_ciNetwork Working Group M. Handley 853a5a1b3Sopenharmony_ciRequest for Comments: 2974 ACIRI 953a5a1b3Sopenharmony_ciCategory: Experimental C. Perkins 1053a5a1b3Sopenharmony_ci USC/ISI 1153a5a1b3Sopenharmony_ci E. Whelan 1253a5a1b3Sopenharmony_ci UCL 1353a5a1b3Sopenharmony_ci October 2000 1453a5a1b3Sopenharmony_ci 1553a5a1b3Sopenharmony_ci 1653a5a1b3Sopenharmony_ci Session Announcement Protocol 1753a5a1b3Sopenharmony_ci 1853a5a1b3Sopenharmony_ciStatus of this Memo 1953a5a1b3Sopenharmony_ci 2053a5a1b3Sopenharmony_ci This memo defines an Experimental Protocol for the Internet 2153a5a1b3Sopenharmony_ci community. It does not specify an Internet standard of any kind. 2253a5a1b3Sopenharmony_ci Discussion and suggestions for improvement are requested. 2353a5a1b3Sopenharmony_ci Distribution of this memo is unlimited. 2453a5a1b3Sopenharmony_ci 2553a5a1b3Sopenharmony_ciCopyright Notice 2653a5a1b3Sopenharmony_ci 2753a5a1b3Sopenharmony_ci Copyright (C) The Internet Society (2000). All Rights Reserved. 2853a5a1b3Sopenharmony_ci 2953a5a1b3Sopenharmony_ciAbstract 3053a5a1b3Sopenharmony_ci 3153a5a1b3Sopenharmony_ci This document describes version 2 of the multicast session directory 3253a5a1b3Sopenharmony_ci announcement protocol, Session Announcement Protocol (SAP), and the 3353a5a1b3Sopenharmony_ci related issues affecting security and scalability that should be 3453a5a1b3Sopenharmony_ci taken into account by implementors. 3553a5a1b3Sopenharmony_ci 3653a5a1b3Sopenharmony_ci1 Introduction 3753a5a1b3Sopenharmony_ci 3853a5a1b3Sopenharmony_ci In order to assist the advertisement of multicast multimedia 3953a5a1b3Sopenharmony_ci conferences and other multicast sessions, and to communicate the 4053a5a1b3Sopenharmony_ci relevant session setup information to prospective participants, a 4153a5a1b3Sopenharmony_ci distributed session directory may be used. An instance of such a 4253a5a1b3Sopenharmony_ci session directory periodically multicasts packets containing a 4353a5a1b3Sopenharmony_ci description of the session, and these advertisements are received by 4453a5a1b3Sopenharmony_ci other session directories such that potential remote participants can 4553a5a1b3Sopenharmony_ci use the session description to start the tools required to 4653a5a1b3Sopenharmony_ci participate in the session. 4753a5a1b3Sopenharmony_ci 4853a5a1b3Sopenharmony_ci This memo describes the issues involved in the multicast announcement 4953a5a1b3Sopenharmony_ci of session description information and defines an announcement 5053a5a1b3Sopenharmony_ci protocol to be used. Sessions are described using the session 5153a5a1b3Sopenharmony_ci description protocol which is described in a companion memo [4]. 5253a5a1b3Sopenharmony_ci 5353a5a1b3Sopenharmony_ci 5453a5a1b3Sopenharmony_ci 5553a5a1b3Sopenharmony_ci 5653a5a1b3Sopenharmony_ci 5753a5a1b3Sopenharmony_ci 5853a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 1] 5953a5a1b3Sopenharmony_ci 6053a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 6153a5a1b3Sopenharmony_ci 6253a5a1b3Sopenharmony_ci 6353a5a1b3Sopenharmony_ci2 Terminology 6453a5a1b3Sopenharmony_ci 6553a5a1b3Sopenharmony_ci A SAP announcer periodically multicasts an announcement packet to a 6653a5a1b3Sopenharmony_ci well known multicast address and port. The announcement is multicast 6753a5a1b3Sopenharmony_ci with the same scope as the session it is announcing, ensuring that 6853a5a1b3Sopenharmony_ci the recipients of the announcement are within the scope of the 6953a5a1b3Sopenharmony_ci session the announcement describes (bandwidth and other such 7053a5a1b3Sopenharmony_ci constraints permitting). This is also important for the scalability 7153a5a1b3Sopenharmony_ci of the protocol, as it keeps local session announcements local. 7253a5a1b3Sopenharmony_ci 7353a5a1b3Sopenharmony_ci A SAP listener learns of the multicast scopes it is within (for 7453a5a1b3Sopenharmony_ci example, using the Multicast-Scope Zone Announcement Protocol [5]) 7553a5a1b3Sopenharmony_ci and listens on the well known SAP address and port for those scopes. 7653a5a1b3Sopenharmony_ci In this manner, it will eventually learn of all the sessions being 7753a5a1b3Sopenharmony_ci announced, allowing those sessions to be joined. 7853a5a1b3Sopenharmony_ci 7953a5a1b3Sopenharmony_ci The key words `MUST', `MUST NOT', `REQUIRED', `SHALL', `SHALL NOT', 8053a5a1b3Sopenharmony_ci `SHOULD', `SHOULD NOT', `RECOMMENDED', `MAY', and `OPTIONAL' in this 8153a5a1b3Sopenharmony_ci document are to be interpreted as described in [1]. 8253a5a1b3Sopenharmony_ci 8353a5a1b3Sopenharmony_ci3 Session Announcement 8453a5a1b3Sopenharmony_ci 8553a5a1b3Sopenharmony_ci As noted previously, a SAP announcer periodically sends an 8653a5a1b3Sopenharmony_ci announcement packet to a well known multicast address and port. 8753a5a1b3Sopenharmony_ci There is no rendezvous mechanism - the SAP announcer is not aware of 8853a5a1b3Sopenharmony_ci the presence or absence of any SAP listeners - and no additional 8953a5a1b3Sopenharmony_ci reliability is provided over the standard best-effort UDP/IP 9053a5a1b3Sopenharmony_ci semantics. 9153a5a1b3Sopenharmony_ci 9253a5a1b3Sopenharmony_ci That announcement contains a session description and SHOULD contain 9353a5a1b3Sopenharmony_ci an authentication header. The session description MAY be encrypted 9453a5a1b3Sopenharmony_ci although this is NOT RECOMMENDED (see section 7). 9553a5a1b3Sopenharmony_ci 9653a5a1b3Sopenharmony_ci A SAP announcement is multicast with the same scope as the session it 9753a5a1b3Sopenharmony_ci is announcing, ensuring that the recipients of the announcement are 9853a5a1b3Sopenharmony_ci within the scope of the session the announcement describes. There are 9953a5a1b3Sopenharmony_ci a number of possibilities: 10053a5a1b3Sopenharmony_ci 10153a5a1b3Sopenharmony_ci IPv4 global scope sessions use multicast addresses in the range 10253a5a1b3Sopenharmony_ci 224.2.128.0 - 224.2.255.255 with SAP announcements being sent to 10353a5a1b3Sopenharmony_ci 224.2.127.254 (note that 224.2.127.255 is used by the obsolete 10453a5a1b3Sopenharmony_ci SAPv0 and MUST NOT be used). 10553a5a1b3Sopenharmony_ci 10653a5a1b3Sopenharmony_ci 10753a5a1b3Sopenharmony_ci 10853a5a1b3Sopenharmony_ci 10953a5a1b3Sopenharmony_ci 11053a5a1b3Sopenharmony_ci 11153a5a1b3Sopenharmony_ci 11253a5a1b3Sopenharmony_ci 11353a5a1b3Sopenharmony_ci 11453a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 2] 11553a5a1b3Sopenharmony_ci 11653a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 11753a5a1b3Sopenharmony_ci 11853a5a1b3Sopenharmony_ci 11953a5a1b3Sopenharmony_ci IPv4 administrative scope sessions using administratively scoped IP 12053a5a1b3Sopenharmony_ci multicast as defined in [7]. The multicast address to be used for 12153a5a1b3Sopenharmony_ci announcements is the highest multicast address in the relevant 12253a5a1b3Sopenharmony_ci administrative scope zone. For example, if the scope range is 12353a5a1b3Sopenharmony_ci 239.16.32.0 - 239.16.33.255, then 239.16.33.255 is used for SAP 12453a5a1b3Sopenharmony_ci announcements. 12553a5a1b3Sopenharmony_ci 12653a5a1b3Sopenharmony_ci IPv6 sessions are announced on the address FF0X:0:0:0:0:0:2:7FFE 12753a5a1b3Sopenharmony_ci where X is the 4-bit scope value. For example, an announcement 12853a5a1b3Sopenharmony_ci for a link-local session assigned the address 12953a5a1b3Sopenharmony_ci FF02:0:0:0:0:0:1234:5678, should be advertised on SAP address 13053a5a1b3Sopenharmony_ci FF02:0:0:0:0:0:2:7FFE. 13153a5a1b3Sopenharmony_ci 13253a5a1b3Sopenharmony_ci Ensuring that a description is not used by a potential participant 13353a5a1b3Sopenharmony_ci outside the session scope is not addressed in this memo. 13453a5a1b3Sopenharmony_ci 13553a5a1b3Sopenharmony_ci SAP announcements MUST be sent on port 9875 and SHOULD be sent with 13653a5a1b3Sopenharmony_ci an IP time-to-live of 255 (the use of TTL scoping for multicast is 13753a5a1b3Sopenharmony_ci discouraged [7]). 13853a5a1b3Sopenharmony_ci 13953a5a1b3Sopenharmony_ci If a session uses addresses in multiple administrative scope ranges, 14053a5a1b3Sopenharmony_ci it is necessary for the announcer to send identical copies of the 14153a5a1b3Sopenharmony_ci announcement to each administrative scope range. It is up to the 14253a5a1b3Sopenharmony_ci listeners to parse such multiple announcements as the same session 14353a5a1b3Sopenharmony_ci (as identified by the SDP origin field, for example). The 14453a5a1b3Sopenharmony_ci announcement rate for each administrative scope range MUST be 14553a5a1b3Sopenharmony_ci calculated separately, as if the multiple announcements were 14653a5a1b3Sopenharmony_ci separate. 14753a5a1b3Sopenharmony_ci 14853a5a1b3Sopenharmony_ci Multiple announcers may announce a single session, as an aid to 14953a5a1b3Sopenharmony_ci robustness in the face of packet loss and failure of one or more 15053a5a1b3Sopenharmony_ci announcers. The rate at which each announcer repeats its 15153a5a1b3Sopenharmony_ci announcement MUST be scaled back such that the total announcement 15253a5a1b3Sopenharmony_ci rate is equal to that which a single server would choose. 15353a5a1b3Sopenharmony_ci Announcements made in this manner MUST be identical. 15453a5a1b3Sopenharmony_ci 15553a5a1b3Sopenharmony_ci If multiple announcements are being made for a session, then each 15653a5a1b3Sopenharmony_ci announcement MUST carry an authentication header signed by the same 15753a5a1b3Sopenharmony_ci key, or be treated as a completely separate announcement by 15853a5a1b3Sopenharmony_ci listeners. 15953a5a1b3Sopenharmony_ci 16053a5a1b3Sopenharmony_ci An IPv4 SAP listener SHOULD listen on the IPv4 global scope SAP 16153a5a1b3Sopenharmony_ci address and on the SAP addresses for each IPv4 administrative scope 16253a5a1b3Sopenharmony_ci zone it is within. The discovery of administrative scope zones is 16353a5a1b3Sopenharmony_ci outside the scope of this memo, but it is assumed that each SAP 16453a5a1b3Sopenharmony_ci listener within a particular scope zone is aware of that scope zone. 16553a5a1b3Sopenharmony_ci A SAP listener which supports IPv6 SHOULD also listen to the IPv6 SAP 16653a5a1b3Sopenharmony_ci addresses. 16753a5a1b3Sopenharmony_ci 16853a5a1b3Sopenharmony_ci 16953a5a1b3Sopenharmony_ci 17053a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 3] 17153a5a1b3Sopenharmony_ci 17253a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 17353a5a1b3Sopenharmony_ci 17453a5a1b3Sopenharmony_ci 17553a5a1b3Sopenharmony_ci3.1 Announcement Interval 17653a5a1b3Sopenharmony_ci 17753a5a1b3Sopenharmony_ci The time period between repetitions of an announcement is chosen such 17853a5a1b3Sopenharmony_ci that the total bandwidth used by all announcements on a single SAP 17953a5a1b3Sopenharmony_ci group remains below a preconfigured limit. If not otherwise 18053a5a1b3Sopenharmony_ci specified, the bandwidth limit SHOULD be assumed to be 4000 bits per 18153a5a1b3Sopenharmony_ci second. 18253a5a1b3Sopenharmony_ci 18353a5a1b3Sopenharmony_ci Each announcer is expected to listen to other announcements in order 18453a5a1b3Sopenharmony_ci to determine the total number of sessions being announced on a 18553a5a1b3Sopenharmony_ci particular group. Sessions are uniquely identified by the 18653a5a1b3Sopenharmony_ci combination of the message identifier hash and originating source 18753a5a1b3Sopenharmony_ci fields of the SAP header (note that SAP v0 announcers always set the 18853a5a1b3Sopenharmony_ci message identifier hash to zero, and if such an announcement is 18953a5a1b3Sopenharmony_ci received the entire message MUST be compared to determine 19053a5a1b3Sopenharmony_ci uniqueness). 19153a5a1b3Sopenharmony_ci 19253a5a1b3Sopenharmony_ci Announcements are made by periodic multicast to the group. The base 19353a5a1b3Sopenharmony_ci interval between announcements is derived from the number of 19453a5a1b3Sopenharmony_ci announcements being made in that group, the size of the announcement 19553a5a1b3Sopenharmony_ci and the configured bandwidth limit. The actual transmission time is 19653a5a1b3Sopenharmony_ci derived from this base interval as follows: 19753a5a1b3Sopenharmony_ci 19853a5a1b3Sopenharmony_ci 1. The announcer initializes the variable tp to be the last time a 19953a5a1b3Sopenharmony_ci particular announcement was transmitted (or the current time if 20053a5a1b3Sopenharmony_ci this is the first time this announcement is to be made). 20153a5a1b3Sopenharmony_ci 20253a5a1b3Sopenharmony_ci 2. Given a configured bandwidth limit in bits/second and an 20353a5a1b3Sopenharmony_ci announcement of ad_size bytes, the base announcement interval 20453a5a1b3Sopenharmony_ci in seconds is 20553a5a1b3Sopenharmony_ci 20653a5a1b3Sopenharmony_ci interval =max(300; (8*no_of_ads*ad_size)/limit) 20753a5a1b3Sopenharmony_ci 20853a5a1b3Sopenharmony_ci 3. An offset is calculated based on the base announcement interval 20953a5a1b3Sopenharmony_ci 21053a5a1b3Sopenharmony_ci offset= rand(interval* 2/3)-(interval/3) 21153a5a1b3Sopenharmony_ci 21253a5a1b3Sopenharmony_ci 4. The next transmission time for an announcement derived as 21353a5a1b3Sopenharmony_ci 21453a5a1b3Sopenharmony_ci tn =tp+ interval+ offset 21553a5a1b3Sopenharmony_ci 21653a5a1b3Sopenharmony_ci The announcer then sets a timer to expire at tn and waits. At time 21753a5a1b3Sopenharmony_ci tn the announcer SHOULD recalculate the next transmission time. If 21853a5a1b3Sopenharmony_ci the new value of tn is before the current time, the announcement is 21953a5a1b3Sopenharmony_ci sent immediately. Otherwise the transmission is rescheduled for the 22053a5a1b3Sopenharmony_ci new tn. This reconsideration prevents transient packet bursts on 22153a5a1b3Sopenharmony_ci startup and when a network partition heals. 22253a5a1b3Sopenharmony_ci 22353a5a1b3Sopenharmony_ci 22453a5a1b3Sopenharmony_ci 22553a5a1b3Sopenharmony_ci 22653a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 4] 22753a5a1b3Sopenharmony_ci 22853a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 22953a5a1b3Sopenharmony_ci 23053a5a1b3Sopenharmony_ci 23153a5a1b3Sopenharmony_ci4 Session Deletion 23253a5a1b3Sopenharmony_ci 23353a5a1b3Sopenharmony_ci Sessions may be deleted in one of several ways: 23453a5a1b3Sopenharmony_ci 23553a5a1b3Sopenharmony_ci Explicit Timeout The session description payload may contain 23653a5a1b3Sopenharmony_ci timestamp information specifying the start- and end-times of the 23753a5a1b3Sopenharmony_ci session. If the current time is later than the end-time of the 23853a5a1b3Sopenharmony_ci session, then the session SHOULD be deleted from the receiver's 23953a5a1b3Sopenharmony_ci session cache. 24053a5a1b3Sopenharmony_ci 24153a5a1b3Sopenharmony_ci Implicit Timeout A session announcement message should be received 24253a5a1b3Sopenharmony_ci periodically for each session description in a receiver's session 24353a5a1b3Sopenharmony_ci cache. The announcement period can be predicted by the receiver 24453a5a1b3Sopenharmony_ci from the set of sessions currently being announced. If a session 24553a5a1b3Sopenharmony_ci announcement message has not been received for ten times the 24653a5a1b3Sopenharmony_ci announcement period, or one hour, whichever is the greater, then 24753a5a1b3Sopenharmony_ci the session is deleted from the receiver's session cache. The one 24853a5a1b3Sopenharmony_ci hour minimum is to allow for transient network partitionings. 24953a5a1b3Sopenharmony_ci 25053a5a1b3Sopenharmony_ci Explicit Deletion A session deletion packet is received specifying 25153a5a1b3Sopenharmony_ci the session to be deleted. Session deletion packets SHOULD have a 25253a5a1b3Sopenharmony_ci valid authentication header, matching that used to authenticate 25353a5a1b3Sopenharmony_ci previous announcement packets. If this authentication is missing, 25453a5a1b3Sopenharmony_ci the deletion message SHOULD be ignored. 25553a5a1b3Sopenharmony_ci 25653a5a1b3Sopenharmony_ci5 Session Modification 25753a5a1b3Sopenharmony_ci 25853a5a1b3Sopenharmony_ci A pre-announced session can be modified by simply announcing the 25953a5a1b3Sopenharmony_ci modified session description. In this case, the version hash in the 26053a5a1b3Sopenharmony_ci SAP header MUST be changed to indicate to receivers that the packet 26153a5a1b3Sopenharmony_ci contents should be parsed (or decrypted and parsed if it is 26253a5a1b3Sopenharmony_ci encrypted). The session itself, as distinct from the session 26353a5a1b3Sopenharmony_ci announcement, is uniquely identified by the payload and not by the 26453a5a1b3Sopenharmony_ci message identifier hash in the header. 26553a5a1b3Sopenharmony_ci 26653a5a1b3Sopenharmony_ci The same rules apply for session modification as for session 26753a5a1b3Sopenharmony_ci deletion: 26853a5a1b3Sopenharmony_ci 26953a5a1b3Sopenharmony_ci o Either the modified announcement must contain an authentication 27053a5a1b3Sopenharmony_ci header signed by the same key as the cached session announcement 27153a5a1b3Sopenharmony_ci it is modifying, or: 27253a5a1b3Sopenharmony_ci 27353a5a1b3Sopenharmony_ci o The cached session announcement must not contain an authentication 27453a5a1b3Sopenharmony_ci header, and the session modification announcement must originate 27553a5a1b3Sopenharmony_ci from the same host as the session it is modifying. 27653a5a1b3Sopenharmony_ci 27753a5a1b3Sopenharmony_ci 27853a5a1b3Sopenharmony_ci 27953a5a1b3Sopenharmony_ci 28053a5a1b3Sopenharmony_ci 28153a5a1b3Sopenharmony_ci 28253a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 5] 28353a5a1b3Sopenharmony_ci 28453a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 28553a5a1b3Sopenharmony_ci 28653a5a1b3Sopenharmony_ci 28753a5a1b3Sopenharmony_ci If an announcement is received containing an authentication header 28853a5a1b3Sopenharmony_ci and the cached announcement did not contain an authentication header, 28953a5a1b3Sopenharmony_ci or it contained a different authentication header, then the modified 29053a5a1b3Sopenharmony_ci announcement MUST be treated as a new and different announcement, and 29153a5a1b3Sopenharmony_ci displayed in addition to the un-authenticated announcement. The same 29253a5a1b3Sopenharmony_ci should happen if a modified packet without an authentication header 29353a5a1b3Sopenharmony_ci is received from a different source than the original announcement. 29453a5a1b3Sopenharmony_ci 29553a5a1b3Sopenharmony_ci These rules prevent an announcement having an authentication header 29653a5a1b3Sopenharmony_ci added by a malicious user and then being deleted using that header, 29753a5a1b3Sopenharmony_ci and it also prevents a denial-of-service attack by someone putting 29853a5a1b3Sopenharmony_ci out a spoof announcement which, due to packet loss, reaches some 29953a5a1b3Sopenharmony_ci participants before the original announcement. Note that under such 30053a5a1b3Sopenharmony_ci circumstances, being able to authenticate the message originator is 30153a5a1b3Sopenharmony_ci the only way to discover which session is the correct session. 30253a5a1b3Sopenharmony_ci 30353a5a1b3Sopenharmony_ci 0 1 2 3 30453a5a1b3Sopenharmony_ci 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 30553a5a1b3Sopenharmony_ci +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 30653a5a1b3Sopenharmony_ci | V=1 |A|R|T|E|C| auth len | msg id hash | 30753a5a1b3Sopenharmony_ci +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 30853a5a1b3Sopenharmony_ci | | 30953a5a1b3Sopenharmony_ci : originating source (32 or 128 bits) : 31053a5a1b3Sopenharmony_ci : : 31153a5a1b3Sopenharmony_ci +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 31253a5a1b3Sopenharmony_ci | optional authentication data | 31353a5a1b3Sopenharmony_ci : .... : 31453a5a1b3Sopenharmony_ci *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 31553a5a1b3Sopenharmony_ci | optional payload type | 31653a5a1b3Sopenharmony_ci + +-+- - - - - - - - - -+ 31753a5a1b3Sopenharmony_ci | |0| | 31853a5a1b3Sopenharmony_ci + - - - - - - - - - - - - - - - - - - - - +-+ | 31953a5a1b3Sopenharmony_ci | | 32053a5a1b3Sopenharmony_ci : payload : 32153a5a1b3Sopenharmony_ci | | 32253a5a1b3Sopenharmony_ci +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 32353a5a1b3Sopenharmony_ci 32453a5a1b3Sopenharmony_ci Figure 1: Packet format 32553a5a1b3Sopenharmony_ci 32653a5a1b3Sopenharmony_ci6 Packet Format 32753a5a1b3Sopenharmony_ci 32853a5a1b3Sopenharmony_ci SAP data packets have the format described in figure 1. 32953a5a1b3Sopenharmony_ci 33053a5a1b3Sopenharmony_ci V: Version Number. The version number field MUST be set to 1 (SAPv2 33153a5a1b3Sopenharmony_ci announcements which use only SAPv1 features are backwards 33253a5a1b3Sopenharmony_ci compatible, those which use new features can be detected by other 33353a5a1b3Sopenharmony_ci means, so the SAP version number doesn't need to change). 33453a5a1b3Sopenharmony_ci 33553a5a1b3Sopenharmony_ci 33653a5a1b3Sopenharmony_ci 33753a5a1b3Sopenharmony_ci 33853a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 6] 33953a5a1b3Sopenharmony_ci 34053a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 34153a5a1b3Sopenharmony_ci 34253a5a1b3Sopenharmony_ci 34353a5a1b3Sopenharmony_ci A: Address type. If the A bit is 0, the originating source field 34453a5a1b3Sopenharmony_ci contains a 32-bit IPv4 address. If the A bit is 1, the 34553a5a1b3Sopenharmony_ci originating source contains a 128-bit IPv6 address. 34653a5a1b3Sopenharmony_ci 34753a5a1b3Sopenharmony_ci R: Reserved. SAP announcers MUST set this to 0, SAP listeners MUST 34853a5a1b3Sopenharmony_ci ignore the contents of this field. 34953a5a1b3Sopenharmony_ci 35053a5a1b3Sopenharmony_ci T: Message Type. If the T field is set to 0 this is a session 35153a5a1b3Sopenharmony_ci announcement packet, if 1 this is a session deletion packet. 35253a5a1b3Sopenharmony_ci 35353a5a1b3Sopenharmony_ci E: Encryption Bit. If the encryption bit is set to 1, the payload of 35453a5a1b3Sopenharmony_ci the SAP packet is encrypted. If this bit is 0 the packet is not 35553a5a1b3Sopenharmony_ci encrypted. See section 7 for details of the encryption process. 35653a5a1b3Sopenharmony_ci 35753a5a1b3Sopenharmony_ci C: Compressed bit. If the compressed bit is set to 1, the payload is 35853a5a1b3Sopenharmony_ci compressed using the zlib compression algorithm [3]. If the 35953a5a1b3Sopenharmony_ci payload is to be compressed and encrypted, the compression MUST be 36053a5a1b3Sopenharmony_ci performed first. 36153a5a1b3Sopenharmony_ci 36253a5a1b3Sopenharmony_ci Authentication Length. An 8 bit unsigned quantity giving the number 36353a5a1b3Sopenharmony_ci of 32 bit words following the main SAP header that contain 36453a5a1b3Sopenharmony_ci authentication data. If it is zero, no authentication header is 36553a5a1b3Sopenharmony_ci present. 36653a5a1b3Sopenharmony_ci 36753a5a1b3Sopenharmony_ci Authentication data containing a digital signature of the packet, 36853a5a1b3Sopenharmony_ci with length as specified by the authentication length header 36953a5a1b3Sopenharmony_ci field. See section 8 for details of the authentication process. 37053a5a1b3Sopenharmony_ci 37153a5a1b3Sopenharmony_ci Message Identifier Hash. A 16 bit quantity that, used in combination 37253a5a1b3Sopenharmony_ci with the originating source, provides a globally unique identifier 37353a5a1b3Sopenharmony_ci indicating the precise version of this announcement. The choice 37453a5a1b3Sopenharmony_ci of value for this field is not specified here, except that it MUST 37553a5a1b3Sopenharmony_ci be unique for each session announced by a particular SAP announcer 37653a5a1b3Sopenharmony_ci and it MUST be changed if the session description is modified (and 37753a5a1b3Sopenharmony_ci a session deletion message SHOULD be sent for the old version of 37853a5a1b3Sopenharmony_ci the session). 37953a5a1b3Sopenharmony_ci 38053a5a1b3Sopenharmony_ci Earlier versions of SAP used a value of zero to mean that the hash 38153a5a1b3Sopenharmony_ci should be ignored and the payload should always be parsed. This 38253a5a1b3Sopenharmony_ci had the unfortunate side-effect that SAP announcers had to study 38353a5a1b3Sopenharmony_ci the payload data to determine how many unique sessions were being 38453a5a1b3Sopenharmony_ci advertised, making the calculation of the announcement interval 38553a5a1b3Sopenharmony_ci more complex that necessary. In order to decouple the session 38653a5a1b3Sopenharmony_ci announcement process from the contents of those announcements, SAP 38753a5a1b3Sopenharmony_ci announcers SHOULD NOT set the message identifier hash to zero. 38853a5a1b3Sopenharmony_ci 38953a5a1b3Sopenharmony_ci SAP listeners MAY silently discard messages if the message 39053a5a1b3Sopenharmony_ci identifier hash is set to zero. 39153a5a1b3Sopenharmony_ci 39253a5a1b3Sopenharmony_ci 39353a5a1b3Sopenharmony_ci 39453a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 7] 39553a5a1b3Sopenharmony_ci 39653a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 39753a5a1b3Sopenharmony_ci 39853a5a1b3Sopenharmony_ci 39953a5a1b3Sopenharmony_ci Originating Source. This gives the IP address of the original source 40053a5a1b3Sopenharmony_ci of the message. This is an IPv4 address if the A field is set to 40153a5a1b3Sopenharmony_ci zero, else it is an IPv6 address. The address is stored in 40253a5a1b3Sopenharmony_ci network byte order. 40353a5a1b3Sopenharmony_ci 40453a5a1b3Sopenharmony_ci SAPv0 permitted the originating source to be zero if the message 40553a5a1b3Sopenharmony_ci identifier hash was also zero. This practise is no longer legal, 40653a5a1b3Sopenharmony_ci and SAP announcers SHOULD NOT set the originating source to zero. 40753a5a1b3Sopenharmony_ci SAP listeners MAY silently discard packets with the originating 40853a5a1b3Sopenharmony_ci source set to zero. 40953a5a1b3Sopenharmony_ci 41053a5a1b3Sopenharmony_ci The header is followed by an optional payload type field and the 41153a5a1b3Sopenharmony_ci payload data itself. If the E or C bits are set in the header both 41253a5a1b3Sopenharmony_ci the payload type and payload are encrypted and/or compressed. 41353a5a1b3Sopenharmony_ci 41453a5a1b3Sopenharmony_ci The payload type field is a MIME content type specifier, describing 41553a5a1b3Sopenharmony_ci the format of the payload. This is a variable length ASCII text 41653a5a1b3Sopenharmony_ci string, followed by a single zero byte (ASCII NUL). The payload type 41753a5a1b3Sopenharmony_ci SHOULD be included in all packets. If the payload type is 41853a5a1b3Sopenharmony_ci `application/sdp' both the payload type and its terminating zero byte 41953a5a1b3Sopenharmony_ci MAY be omitted, although this is intended for backwards compatibility 42053a5a1b3Sopenharmony_ci with SAP v1 listeners only. 42153a5a1b3Sopenharmony_ci 42253a5a1b3Sopenharmony_ci The absence of a payload type field may be noted since the payload 42353a5a1b3Sopenharmony_ci section of such a packet will start with an SDP `v=0' field, which is 42453a5a1b3Sopenharmony_ci not a legal MIME content type specifier. 42553a5a1b3Sopenharmony_ci 42653a5a1b3Sopenharmony_ci All implementations MUST support payloads of type `application/sdp' 42753a5a1b3Sopenharmony_ci [4]. Other formats MAY be supported although since there is no 42853a5a1b3Sopenharmony_ci negotiation in SAP an announcer which chooses to use a session 42953a5a1b3Sopenharmony_ci description format other than SDP cannot know that the listeners are 43053a5a1b3Sopenharmony_ci able to understand the announcement. A proliferation of payload 43153a5a1b3Sopenharmony_ci types in announcements has the potential to lead to severe 43253a5a1b3Sopenharmony_ci interoperability problems, and for this reason, the use of non-SDP 43353a5a1b3Sopenharmony_ci payloads is NOT RECOMMENDED. 43453a5a1b3Sopenharmony_ci 43553a5a1b3Sopenharmony_ci If the packet is an announcement packet, the payload contains a 43653a5a1b3Sopenharmony_ci session description. 43753a5a1b3Sopenharmony_ci 43853a5a1b3Sopenharmony_ci If the packet is a session deletion packet, the payload contains a 43953a5a1b3Sopenharmony_ci session deletion message. If the payload format is `application/sdp' 44053a5a1b3Sopenharmony_ci the deletion message is a single SDP line consisting of the origin 44153a5a1b3Sopenharmony_ci field of the announcement to be deleted. 44253a5a1b3Sopenharmony_ci 44353a5a1b3Sopenharmony_ci It is desirable for the payload to be sufficiently small that SAP 44453a5a1b3Sopenharmony_ci packets do not get fragmented by the underlying network. 44553a5a1b3Sopenharmony_ci Fragmentation has a loss multiplier effect, which is known to 44653a5a1b3Sopenharmony_ci significantly affect the reliability of announcements. It is 44753a5a1b3Sopenharmony_ci 44853a5a1b3Sopenharmony_ci 44953a5a1b3Sopenharmony_ci 45053a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 8] 45153a5a1b3Sopenharmony_ci 45253a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 45353a5a1b3Sopenharmony_ci 45453a5a1b3Sopenharmony_ci 45553a5a1b3Sopenharmony_ci RECOMMENDED that SAP packets are smaller than 1kByte in length, 45653a5a1b3Sopenharmony_ci although if it is known that announcements will use a network with a 45753a5a1b3Sopenharmony_ci smaller MTU than this, then that SHOULD be used as the maximum 45853a5a1b3Sopenharmony_ci recommended packet size. 45953a5a1b3Sopenharmony_ci 46053a5a1b3Sopenharmony_ci7 Encrypted Announcements 46153a5a1b3Sopenharmony_ci 46253a5a1b3Sopenharmony_ci An announcement is received by all listeners in the scope to which it 46353a5a1b3Sopenharmony_ci is sent. If an announcement is encrypted, and many of the receivers 46453a5a1b3Sopenharmony_ci do not have the encryption key, there is a considerable waste of 46553a5a1b3Sopenharmony_ci bandwidth since those receivers cannot use the announcement they have 46653a5a1b3Sopenharmony_ci received. For this reason, the use of encrypted SAP announcements is 46753a5a1b3Sopenharmony_ci NOT RECOMMENDED on the global scope SAP group or on administrative 46853a5a1b3Sopenharmony_ci scope groups which may have many receivers which cannot decrypt those 46953a5a1b3Sopenharmony_ci announcements. 47053a5a1b3Sopenharmony_ci 47153a5a1b3Sopenharmony_ci The opinion of the authors is that encrypted SAP is useful in special 47253a5a1b3Sopenharmony_ci cases only, and that the vast majority of scenarios where encrypted 47353a5a1b3Sopenharmony_ci SAP has been proposed may be better served by distributing session 47453a5a1b3Sopenharmony_ci details using another mechanism. There are, however, certain 47553a5a1b3Sopenharmony_ci scenarios where encrypted announcements may be useful. For this 47653a5a1b3Sopenharmony_ci reason, the encryption bit is included in the SAP header to allow 47753a5a1b3Sopenharmony_ci experimentation with encrypted announcements. 47853a5a1b3Sopenharmony_ci 47953a5a1b3Sopenharmony_ci This memo does not specify details of the encryption algorithm to be 48053a5a1b3Sopenharmony_ci used or the means by which keys are generated and distributed. An 48153a5a1b3Sopenharmony_ci additional specification should define these, if it is desired to use 48253a5a1b3Sopenharmony_ci encrypted SAP. 48353a5a1b3Sopenharmony_ci 48453a5a1b3Sopenharmony_ci Note that if an encrypted announcement is being announced via a 48553a5a1b3Sopenharmony_ci proxy, then there may be no way for the proxy to discover that the 48653a5a1b3Sopenharmony_ci announcement has been superseded, and so it may continue to relay the 48753a5a1b3Sopenharmony_ci old announcement in addition to the new announcement. SAP provides 48853a5a1b3Sopenharmony_ci no mechanism to chain modified encrypted announcements, so it is 48953a5a1b3Sopenharmony_ci advisable to announce the unmodified session as deleted for a short 49053a5a1b3Sopenharmony_ci time after the modification has occurred. This does not guarantee 49153a5a1b3Sopenharmony_ci that all proxies have deleted the session, and so receivers of 49253a5a1b3Sopenharmony_ci encrypted sessions should be prepared to discard old versions of 49353a5a1b3Sopenharmony_ci session announcements that they may receive. In most cases however, 49453a5a1b3Sopenharmony_ci the only stateful proxy will be local to (and known to) the sender, 49553a5a1b3Sopenharmony_ci and an additional (local-area) protocol involving a handshake for 49653a5a1b3Sopenharmony_ci such session modifications can be used to avoid this problem. 49753a5a1b3Sopenharmony_ci 49853a5a1b3Sopenharmony_ci Session announcements that are encrypted with a symmetric algorithm 49953a5a1b3Sopenharmony_ci may allow a degree of privacy in the announcement of a session, but 50053a5a1b3Sopenharmony_ci it should be recognized that a user in possession of such a key can 50153a5a1b3Sopenharmony_ci pass it on to other users who should not be in possession of such a 50253a5a1b3Sopenharmony_ci key. Thus announcements to such a group of key holders cannot be 50353a5a1b3Sopenharmony_ci 50453a5a1b3Sopenharmony_ci 50553a5a1b3Sopenharmony_ci 50653a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 9] 50753a5a1b3Sopenharmony_ci 50853a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 50953a5a1b3Sopenharmony_ci 51053a5a1b3Sopenharmony_ci 51153a5a1b3Sopenharmony_ci assumed to have come from an authorized key holder unless there is an 51253a5a1b3Sopenharmony_ci appropriate authentication header signed by an authorized key holder. 51353a5a1b3Sopenharmony_ci In addition the recipients of such encrypted announcements cannot be 51453a5a1b3Sopenharmony_ci assumed to only be authorized key holders. Such encrypted 51553a5a1b3Sopenharmony_ci announcements do not provide any real security unless all of the 51653a5a1b3Sopenharmony_ci authorized key holders are trusted to maintain security of such 51753a5a1b3Sopenharmony_ci session directory keys. This property is shared by the multicast 51853a5a1b3Sopenharmony_ci session tools themselves, where it is possible for an un-trustworthy 51953a5a1b3Sopenharmony_ci member of the session to pass on encryption keys to un-authorized 52053a5a1b3Sopenharmony_ci users. However it is likely that keys used for the session tools 52153a5a1b3Sopenharmony_ci will be more short lived than those used for session directories. 52253a5a1b3Sopenharmony_ci 52353a5a1b3Sopenharmony_ci Similar considerations should apply when session announcements are 52453a5a1b3Sopenharmony_ci encrypted with an asymmetric algorithm, but then it is possible to 52553a5a1b3Sopenharmony_ci restrict the possessor(s) of the private key, so that announcements 52653a5a1b3Sopenharmony_ci to a key-holder group can not be made, even if one of the untrusted 52753a5a1b3Sopenharmony_ci members of the group proves to be un-trustworthy. 52853a5a1b3Sopenharmony_ci 52953a5a1b3Sopenharmony_ci 1 2 3 53053a5a1b3Sopenharmony_ci 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 53153a5a1b3Sopenharmony_ci +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 53253a5a1b3Sopenharmony_ci | V=1 |P| Auth | | 53353a5a1b3Sopenharmony_ci +-+-+-+-+-+-+-+-+ | 53453a5a1b3Sopenharmony_ci | Format specific authentication subheader | 53553a5a1b3Sopenharmony_ci : .................. : 53653a5a1b3Sopenharmony_ci +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 53753a5a1b3Sopenharmony_ci 53853a5a1b3Sopenharmony_ci Figure 2: Format of the authentication data in the SAP header 53953a5a1b3Sopenharmony_ci 54053a5a1b3Sopenharmony_ci8 Authenticated Announcements 54153a5a1b3Sopenharmony_ci 54253a5a1b3Sopenharmony_ci The authentication header can be used for two purposes: 54353a5a1b3Sopenharmony_ci 54453a5a1b3Sopenharmony_ci o Verification that changes to a session description or deletion of 54553a5a1b3Sopenharmony_ci a session are permitted. 54653a5a1b3Sopenharmony_ci 54753a5a1b3Sopenharmony_ci o Authentication of the identity of the session creator. 54853a5a1b3Sopenharmony_ci 54953a5a1b3Sopenharmony_ci In some circumstances only verification is possible because a 55053a5a1b3Sopenharmony_ci certificate signed by a mutually trusted person or authority is not 55153a5a1b3Sopenharmony_ci available. However, under such circumstances, the session originator 55253a5a1b3Sopenharmony_ci may still be authenticated to be the same as the session originator 55353a5a1b3Sopenharmony_ci of previous sessions claiming to be from the same person. This may 55453a5a1b3Sopenharmony_ci or may not be sufficient depending on the purpose of the session and 55553a5a1b3Sopenharmony_ci the people involved. 55653a5a1b3Sopenharmony_ci 55753a5a1b3Sopenharmony_ci 55853a5a1b3Sopenharmony_ci 55953a5a1b3Sopenharmony_ci 56053a5a1b3Sopenharmony_ci 56153a5a1b3Sopenharmony_ci 56253a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 10] 56353a5a1b3Sopenharmony_ci 56453a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 56553a5a1b3Sopenharmony_ci 56653a5a1b3Sopenharmony_ci 56753a5a1b3Sopenharmony_ci Clearly the key used for the authentication should not be trusted to 56853a5a1b3Sopenharmony_ci belong to the session originator unless it has been separately 56953a5a1b3Sopenharmony_ci authenticated by some other means, such as being certified by a 57053a5a1b3Sopenharmony_ci trusted third party. Such certificates are not normally included in 57153a5a1b3Sopenharmony_ci an SAP header because they take more space than can normally be 57253a5a1b3Sopenharmony_ci afforded in an SAP packet, and such verification must therefore take 57353a5a1b3Sopenharmony_ci place by some other mechanism. However, as certified public keys are 57453a5a1b3Sopenharmony_ci normally locally cached, authentication of a particular key only has 57553a5a1b3Sopenharmony_ci to take place once, rather than every time the session directory 57653a5a1b3Sopenharmony_ci retransmits the announcement. 57753a5a1b3Sopenharmony_ci 57853a5a1b3Sopenharmony_ci SAP is not tied to any single authentication mechanism. 57953a5a1b3Sopenharmony_ci Authentication data in the header is self-describing, but the precise 58053a5a1b3Sopenharmony_ci format depends on the authentication mechanism in use. The generic 58153a5a1b3Sopenharmony_ci format of the authentication data is given in figure 2. The 58253a5a1b3Sopenharmony_ci structure of the format specific authentication subheader, using both 58353a5a1b3Sopenharmony_ci the PGP and the CMS formats, is discussed in sections 8.1 and 8.2 58453a5a1b3Sopenharmony_ci respectively. Additional formats may be added in future. 58553a5a1b3Sopenharmony_ci 58653a5a1b3Sopenharmony_ci Version Number, V: The version number of the authentication format 58753a5a1b3Sopenharmony_ci specified by this memo is 1. 58853a5a1b3Sopenharmony_ci 58953a5a1b3Sopenharmony_ci Padding Bit, P: If necessary the authentication data is padded to be 59053a5a1b3Sopenharmony_ci a multiple of 32 bits and the padding bit is set. In this case 59153a5a1b3Sopenharmony_ci the last byte of the authentication data contains the number of 59253a5a1b3Sopenharmony_ci padding bytes (including the last byte) that must be discarded. 59353a5a1b3Sopenharmony_ci 59453a5a1b3Sopenharmony_ci Authentication Type, Auth: The authentication type is a 4 bit 59553a5a1b3Sopenharmony_ci encoded field that denotes the authentication infrastructure the 59653a5a1b3Sopenharmony_ci sender expects the recipients to use to check the authenticity and 59753a5a1b3Sopenharmony_ci integrity of the information. This defines the format of the 59853a5a1b3Sopenharmony_ci authentication subheader and can take the values: 0 = PGP format, 59953a5a1b3Sopenharmony_ci 1 = CMS format. All other values are undefined and SHOULD be 60053a5a1b3Sopenharmony_ci ignored. 60153a5a1b3Sopenharmony_ci 60253a5a1b3Sopenharmony_ci If a SAP packet is to be compressed or encrypted, this MUST be done 60353a5a1b3Sopenharmony_ci before the authentication is added. 60453a5a1b3Sopenharmony_ci 60553a5a1b3Sopenharmony_ci The digital signature in the authentication data MUST be calculated 60653a5a1b3Sopenharmony_ci over the entire packet, including the header. The authentication 60753a5a1b3Sopenharmony_ci length MUST be set to zero and the authentication data excluded when 60853a5a1b3Sopenharmony_ci calculating the digital signature. 60953a5a1b3Sopenharmony_ci 61053a5a1b3Sopenharmony_ci It is to be expected that sessions may be announced by a number of 61153a5a1b3Sopenharmony_ci different mechanisms, not only SAP. For example, a session 61253a5a1b3Sopenharmony_ci description may placed on a web page, sent by email or conveyed in a 61353a5a1b3Sopenharmony_ci 61453a5a1b3Sopenharmony_ci 61553a5a1b3Sopenharmony_ci 61653a5a1b3Sopenharmony_ci 61753a5a1b3Sopenharmony_ci 61853a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 11] 61953a5a1b3Sopenharmony_ci 62053a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 62153a5a1b3Sopenharmony_ci 62253a5a1b3Sopenharmony_ci 62353a5a1b3Sopenharmony_ci session initiation protocol. To ease interoperability with these 62453a5a1b3Sopenharmony_ci other mechanisms, application level security is employed, rather than 62553a5a1b3Sopenharmony_ci using IPsec authentication headers. 62653a5a1b3Sopenharmony_ci 62753a5a1b3Sopenharmony_ci8.1 PGP Authentication 62853a5a1b3Sopenharmony_ci 62953a5a1b3Sopenharmony_ci A full description of the PGP protocol can be found in [2]. When 63053a5a1b3Sopenharmony_ci using PGP for SAP authentication the basic format specific 63153a5a1b3Sopenharmony_ci authentication subheader comprises a digital signature packet as 63253a5a1b3Sopenharmony_ci described in [2]. The signature type MUST be 0x01 which means the 63353a5a1b3Sopenharmony_ci signature is that of a canonical text document. 63453a5a1b3Sopenharmony_ci 63553a5a1b3Sopenharmony_ci8.2 CMS Authentication 63653a5a1b3Sopenharmony_ci 63753a5a1b3Sopenharmony_ci A full description of the Cryptographic Message Syntax can be found 63853a5a1b3Sopenharmony_ci in [6]. The format specific authentication subheader will, in the 63953a5a1b3Sopenharmony_ci CMS case, have an ASN.1 ContentInfo type with the ContentType being 64053a5a1b3Sopenharmony_ci signedData. 64153a5a1b3Sopenharmony_ci 64253a5a1b3Sopenharmony_ci Use is made of the option available in PKCS#7 to leave the content 64353a5a1b3Sopenharmony_ci itself blank as the content which is signed is already present in the 64453a5a1b3Sopenharmony_ci packet. Inclusion of it within the SignedData type would duplicate 64553a5a1b3Sopenharmony_ci this data and increase the packet length unnecessarily. In addition 64653a5a1b3Sopenharmony_ci this allows recipients with either no interest in the authentication, 64753a5a1b3Sopenharmony_ci or with no mechanism for checking it, to more easily skip the 64853a5a1b3Sopenharmony_ci authentication information. 64953a5a1b3Sopenharmony_ci 65053a5a1b3Sopenharmony_ci There SHOULD be only one signerInfo and related fields corresponding 65153a5a1b3Sopenharmony_ci to the originator of the SAP announcement. The signingTime SHOULD be 65253a5a1b3Sopenharmony_ci present as a signedAttribute. However, due to the strict size 65353a5a1b3Sopenharmony_ci limitations on the size of SAP packets, certificates and CRLs SHOULD 65453a5a1b3Sopenharmony_ci NOT be included in the signedData structure. It is expected that 65553a5a1b3Sopenharmony_ci users of the protocol will have other methods for certificate and CRL 65653a5a1b3Sopenharmony_ci distribution. 65753a5a1b3Sopenharmony_ci 65853a5a1b3Sopenharmony_ci9 Scalability and caching 65953a5a1b3Sopenharmony_ci 66053a5a1b3Sopenharmony_ci SAP is intended to announce the existence of long-lived wide-area 66153a5a1b3Sopenharmony_ci multicast sessions. It is not an especially timely protocol: 66253a5a1b3Sopenharmony_ci sessions are announced by periodic multicast with a repeat rate on 66353a5a1b3Sopenharmony_ci the order of tens of minutes, and no enhanced reliability over UDP. 66453a5a1b3Sopenharmony_ci This leads to a long startup delay before a complete set of 66553a5a1b3Sopenharmony_ci announcements is heard by a listener. This delay is clearly 66653a5a1b3Sopenharmony_ci undesirable for interactive browsing of announced sessions. 66753a5a1b3Sopenharmony_ci 66853a5a1b3Sopenharmony_ci In order to reduce the delays inherent in SAP, it is recommended that 66953a5a1b3Sopenharmony_ci proxy caches are deployed. A SAP proxy cache is expected to listen 67053a5a1b3Sopenharmony_ci to all SAP groups in its scope, and to maintain an up-to-date list of 67153a5a1b3Sopenharmony_ci 67253a5a1b3Sopenharmony_ci 67353a5a1b3Sopenharmony_ci 67453a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 12] 67553a5a1b3Sopenharmony_ci 67653a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 67753a5a1b3Sopenharmony_ci 67853a5a1b3Sopenharmony_ci 67953a5a1b3Sopenharmony_ci all announced sessions along with the time each announcement was last 68053a5a1b3Sopenharmony_ci received. When a new SAP listeners starts, it should contact its 68153a5a1b3Sopenharmony_ci local proxy to download this information, which is then sufficient 68253a5a1b3Sopenharmony_ci for it to process future announcements directly, as if it has been 68353a5a1b3Sopenharmony_ci continually listening. 68453a5a1b3Sopenharmony_ci 68553a5a1b3Sopenharmony_ci The protocol by which a SAP listener contacts its local proxy cache 68653a5a1b3Sopenharmony_ci is not specified here. 68753a5a1b3Sopenharmony_ci 68853a5a1b3Sopenharmony_ci10 Security Considerations 68953a5a1b3Sopenharmony_ci 69053a5a1b3Sopenharmony_ci SAP contains mechanisms for ensuring integrity of session 69153a5a1b3Sopenharmony_ci announcements, for authenticating the origin of an announcement and 69253a5a1b3Sopenharmony_ci for encrypting such announcements (sections 7 and 8). 69353a5a1b3Sopenharmony_ci 69453a5a1b3Sopenharmony_ci As stated in section 5, if a session modification announcement is 69553a5a1b3Sopenharmony_ci received that contains a valid authentication header, but which is 69653a5a1b3Sopenharmony_ci not signed by the original creator of the session, then the session 69753a5a1b3Sopenharmony_ci must be treated as a new session in addition to the original session 69853a5a1b3Sopenharmony_ci with the same SDP origin information unless the originator of one of 69953a5a1b3Sopenharmony_ci the session descriptions can be authenticated using a certificate 70053a5a1b3Sopenharmony_ci signed by a trusted third party. If this were not done, there would 70153a5a1b3Sopenharmony_ci be a possible denial of service attack whereby a party listens for 70253a5a1b3Sopenharmony_ci new announcements, strips off the original authentication header, 70353a5a1b3Sopenharmony_ci modifies the session description, adds a new authentication header 70453a5a1b3Sopenharmony_ci and re-announces the session. If a rule was imposed that such spoof 70553a5a1b3Sopenharmony_ci announcements were ignored, then if packet loss or late starting of a 70653a5a1b3Sopenharmony_ci session directory instance caused the original announcement to fail 70753a5a1b3Sopenharmony_ci to arrive at a site, but the spoof announcement did so, this would 70853a5a1b3Sopenharmony_ci then prevent the original announcement from being accepted at that 70953a5a1b3Sopenharmony_ci site. 71053a5a1b3Sopenharmony_ci 71153a5a1b3Sopenharmony_ci A similar denial-of-service attack is possible if a session 71253a5a1b3Sopenharmony_ci announcement receiver relies completely on the originating source and 71353a5a1b3Sopenharmony_ci hash fields to indicate change, and fails to parse the remainder of 71453a5a1b3Sopenharmony_ci announcements for which it has seen the origin/hash combination 71553a5a1b3Sopenharmony_ci before. 71653a5a1b3Sopenharmony_ci 71753a5a1b3Sopenharmony_ci A denial of service attack is possible from a malicious site close to 71853a5a1b3Sopenharmony_ci a legitimate site which is making a session announcement. This can 71953a5a1b3Sopenharmony_ci happen if the malicious site floods the legitimate site with huge 72053a5a1b3Sopenharmony_ci numbers of (illegal) low TTL announcements describing high TTL 72153a5a1b3Sopenharmony_ci sessions. This may reduce the session announcement rate of the 72253a5a1b3Sopenharmony_ci legitimate announcement to below a tenth of the rate expected at 72353a5a1b3Sopenharmony_ci remote sites and therefore cause the session to time out. Such an 72453a5a1b3Sopenharmony_ci attack is likely to be easily detectable, and we do not provide any 72553a5a1b3Sopenharmony_ci mechanism here to prevent it. 72653a5a1b3Sopenharmony_ci 72753a5a1b3Sopenharmony_ci 72853a5a1b3Sopenharmony_ci 72953a5a1b3Sopenharmony_ci 73053a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 13] 73153a5a1b3Sopenharmony_ci 73253a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 73353a5a1b3Sopenharmony_ci 73453a5a1b3Sopenharmony_ci 73553a5a1b3Sopenharmony_ciA. Summary of differences between SAPv0 and SAPv1 73653a5a1b3Sopenharmony_ci 73753a5a1b3Sopenharmony_ci For this purpose SAPv0 is defined as the protocol in use by version 73853a5a1b3Sopenharmony_ci 2.2 of the session directory tool, sdr. SAPv1 is the protocol 73953a5a1b3Sopenharmony_ci described in the 19 November 1996 version of this memo. The packet 74053a5a1b3Sopenharmony_ci headers of SAP messages are the same in V0 and V1 in that a V1 tool 74153a5a1b3Sopenharmony_ci can parse a V0 announcement header but not vice-versa. In SAPv0, the 74253a5a1b3Sopenharmony_ci fields have the following values: 74353a5a1b3Sopenharmony_ci 74453a5a1b3Sopenharmony_ci o Version Number: 0 74553a5a1b3Sopenharmony_ci 74653a5a1b3Sopenharmony_ci o Message Type: 0 (Announcement) 74753a5a1b3Sopenharmony_ci 74853a5a1b3Sopenharmony_ci o Authentication Type: 0 (No Authentication) 74953a5a1b3Sopenharmony_ci 75053a5a1b3Sopenharmony_ci o Encryption Bit: 0 (No Encryption) 75153a5a1b3Sopenharmony_ci 75253a5a1b3Sopenharmony_ci o Compression Bit: 0 (No compression) 75353a5a1b3Sopenharmony_ci 75453a5a1b3Sopenharmony_ci o Message Id Hash: 0 (No Hash Specified) 75553a5a1b3Sopenharmony_ci 75653a5a1b3Sopenharmony_ci o Originating Source: 0 (No source specified, announcement has 75753a5a1b3Sopenharmony_ci not been relayed) 75853a5a1b3Sopenharmony_ci 75953a5a1b3Sopenharmony_ciB. Summary of differences between SAPv1 and SAPv2 76053a5a1b3Sopenharmony_ci 76153a5a1b3Sopenharmony_ci The packet headers of SAP messages are the same in V1 and V2 in that 76253a5a1b3Sopenharmony_ci a V2 tool can parse a V1 announcement header but not necessarily 76353a5a1b3Sopenharmony_ci vice-versa. 76453a5a1b3Sopenharmony_ci 76553a5a1b3Sopenharmony_ci o The A bit has been added to the SAP header, replacing one of the 76653a5a1b3Sopenharmony_ci bits of the SAPv1 message type field. If set to zero the 76753a5a1b3Sopenharmony_ci announcement is of an IPv4 session, and the packet is backwards 76853a5a1b3Sopenharmony_ci compatible with SAPv1. If set to one the announcement is of an 76953a5a1b3Sopenharmony_ci IPv6 session, and SAPv1 listeners (which do not support IPv6) will 77053a5a1b3Sopenharmony_ci see this as an illegal message type (MT) field. 77153a5a1b3Sopenharmony_ci 77253a5a1b3Sopenharmony_ci o The second bit of the message type field in SAPv1 has been 77353a5a1b3Sopenharmony_ci replaced by a reserved, must-be-zero, bit. This bit was unused in 77453a5a1b3Sopenharmony_ci SAPv1, so this change just codifies existing usage. 77553a5a1b3Sopenharmony_ci 77653a5a1b3Sopenharmony_ci o SAPv1 specified encryption of the payload. SAPv2 includes the E 77753a5a1b3Sopenharmony_ci bit in the SAP header to indicate that the payload is encrypted, 77853a5a1b3Sopenharmony_ci but does not specify any details of the encryption. 77953a5a1b3Sopenharmony_ci 78053a5a1b3Sopenharmony_ci o SAPv1 allowed the message identifier hash and originating source 78153a5a1b3Sopenharmony_ci fields to be set to zero, for backwards compatibility. This is no 78253a5a1b3Sopenharmony_ci longer legal. 78353a5a1b3Sopenharmony_ci 78453a5a1b3Sopenharmony_ci 78553a5a1b3Sopenharmony_ci 78653a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 14] 78753a5a1b3Sopenharmony_ci 78853a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 78953a5a1b3Sopenharmony_ci 79053a5a1b3Sopenharmony_ci 79153a5a1b3Sopenharmony_ci o SAPv1 specified gzip compression. SAPv2 uses zlib (the only known 79253a5a1b3Sopenharmony_ci implementation of SAP compression used zlib, and gzip compression 79353a5a1b3Sopenharmony_ci was a mistake). 79453a5a1b3Sopenharmony_ci 79553a5a1b3Sopenharmony_ci o SAPv2 provides a more complete specification for authentication. 79653a5a1b3Sopenharmony_ci 79753a5a1b3Sopenharmony_ci o SAPv2 allows for non-SDP payloads to be transported. SAPv1 79853a5a1b3Sopenharmony_ci required that the payload was SDP. 79953a5a1b3Sopenharmony_ci 80053a5a1b3Sopenharmony_ci o SAPv1 included a timeout field for encrypted announcement, SAPv2 80153a5a1b3Sopenharmony_ci does not (and relies of explicit deletion messages or implicit 80253a5a1b3Sopenharmony_ci timeouts). 80353a5a1b3Sopenharmony_ci 80453a5a1b3Sopenharmony_ciC. Acknowledgements 80553a5a1b3Sopenharmony_ci 80653a5a1b3Sopenharmony_ci SAP and SDP were originally based on the protocol used by the sd 80753a5a1b3Sopenharmony_ci session directory from Van Jacobson at LBNL. Version 1 of SAP was 80853a5a1b3Sopenharmony_ci designed by Mark Handley as part of the European Commission MICE 80953a5a1b3Sopenharmony_ci (Esprit 7602) and MERCI (Telematics 1007) projects. Version 2 81053a5a1b3Sopenharmony_ci includes authentication features developed by Edmund Whelan, Goli 81153a5a1b3Sopenharmony_ci Montasser-Kohsari and Peter Kirstein as part of the European 81253a5a1b3Sopenharmony_ci Commission ICE-TEL project (Telematics 1005), and support for IPv6 81353a5a1b3Sopenharmony_ci developed by Maryann P. Maher and Colin Perkins. 81453a5a1b3Sopenharmony_ci 81553a5a1b3Sopenharmony_ci 81653a5a1b3Sopenharmony_ci 81753a5a1b3Sopenharmony_ci 81853a5a1b3Sopenharmony_ci 81953a5a1b3Sopenharmony_ci 82053a5a1b3Sopenharmony_ci 82153a5a1b3Sopenharmony_ci 82253a5a1b3Sopenharmony_ci 82353a5a1b3Sopenharmony_ci 82453a5a1b3Sopenharmony_ci 82553a5a1b3Sopenharmony_ci 82653a5a1b3Sopenharmony_ci 82753a5a1b3Sopenharmony_ci 82853a5a1b3Sopenharmony_ci 82953a5a1b3Sopenharmony_ci 83053a5a1b3Sopenharmony_ci 83153a5a1b3Sopenharmony_ci 83253a5a1b3Sopenharmony_ci 83353a5a1b3Sopenharmony_ci 83453a5a1b3Sopenharmony_ci 83553a5a1b3Sopenharmony_ci 83653a5a1b3Sopenharmony_ci 83753a5a1b3Sopenharmony_ci 83853a5a1b3Sopenharmony_ci 83953a5a1b3Sopenharmony_ci 84053a5a1b3Sopenharmony_ci 84153a5a1b3Sopenharmony_ci 84253a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 15] 84353a5a1b3Sopenharmony_ci 84453a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 84553a5a1b3Sopenharmony_ci 84653a5a1b3Sopenharmony_ci 84753a5a1b3Sopenharmony_ciD. Authors' Addresses 84853a5a1b3Sopenharmony_ci 84953a5a1b3Sopenharmony_ci Mark Handley 85053a5a1b3Sopenharmony_ci AT&T Center for Internet Research at ICSI, 85153a5a1b3Sopenharmony_ci International Computer Science Institute, 85253a5a1b3Sopenharmony_ci 1947 Center Street, Suite 600, 85353a5a1b3Sopenharmony_ci Berkeley, CA 94704, USA 85453a5a1b3Sopenharmony_ci 85553a5a1b3Sopenharmony_ci EMail: mjh@aciri.org 85653a5a1b3Sopenharmony_ci 85753a5a1b3Sopenharmony_ci 85853a5a1b3Sopenharmony_ci Colin Perkins 85953a5a1b3Sopenharmony_ci USC Information Sciences Institute 86053a5a1b3Sopenharmony_ci 4350 N. Fairfax Drive, Suite 620 86153a5a1b3Sopenharmony_ci Arlington, VA 22203, USA 86253a5a1b3Sopenharmony_ci 86353a5a1b3Sopenharmony_ci EMail: csp@isi.edu 86453a5a1b3Sopenharmony_ci 86553a5a1b3Sopenharmony_ci 86653a5a1b3Sopenharmony_ci Edmund Whelan 86753a5a1b3Sopenharmony_ci Department of Computer Science, 86853a5a1b3Sopenharmony_ci University College London, 86953a5a1b3Sopenharmony_ci Gower Street, 87053a5a1b3Sopenharmony_ci London, WC1E 6BT, UK 87153a5a1b3Sopenharmony_ci 87253a5a1b3Sopenharmony_ci EMail: e.whelan@cs.ucl.ac.uk 87353a5a1b3Sopenharmony_ci 87453a5a1b3Sopenharmony_ci 87553a5a1b3Sopenharmony_ci 87653a5a1b3Sopenharmony_ci 87753a5a1b3Sopenharmony_ci 87853a5a1b3Sopenharmony_ci 87953a5a1b3Sopenharmony_ci 88053a5a1b3Sopenharmony_ci 88153a5a1b3Sopenharmony_ci 88253a5a1b3Sopenharmony_ci 88353a5a1b3Sopenharmony_ci 88453a5a1b3Sopenharmony_ci 88553a5a1b3Sopenharmony_ci 88653a5a1b3Sopenharmony_ci 88753a5a1b3Sopenharmony_ci 88853a5a1b3Sopenharmony_ci 88953a5a1b3Sopenharmony_ci 89053a5a1b3Sopenharmony_ci 89153a5a1b3Sopenharmony_ci 89253a5a1b3Sopenharmony_ci 89353a5a1b3Sopenharmony_ci 89453a5a1b3Sopenharmony_ci 89553a5a1b3Sopenharmony_ci 89653a5a1b3Sopenharmony_ci 89753a5a1b3Sopenharmony_ci 89853a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 16] 89953a5a1b3Sopenharmony_ci 90053a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 90153a5a1b3Sopenharmony_ci 90253a5a1b3Sopenharmony_ci 90353a5a1b3Sopenharmony_ciReferences 90453a5a1b3Sopenharmony_ci 90553a5a1b3Sopenharmony_ci [1] Bradner, S., "Key words for use in RFCs to indicate requirement 90653a5a1b3Sopenharmony_ci levels", BCP 14, RFC 2119, March 1997. 90753a5a1b3Sopenharmony_ci 90853a5a1b3Sopenharmony_ci [2] Callas, J., Donnerhacke, L., Finney, H. and R. Thayer. "OpenPGP 90953a5a1b3Sopenharmony_ci message format", RFC 2440, November 1998. 91053a5a1b3Sopenharmony_ci 91153a5a1b3Sopenharmony_ci [3] Deutsch, P. and J.-L. Gailly, "Zlib compressed data format 91253a5a1b3Sopenharmony_ci specification version 3.3", RFC 1950, May 1996. 91353a5a1b3Sopenharmony_ci 91453a5a1b3Sopenharmony_ci [4] Handley, M. and V. Jacobson, "SDP: Session Description Protocol", 91553a5a1b3Sopenharmony_ci RFC 2327, April 1998. 91653a5a1b3Sopenharmony_ci 91753a5a1b3Sopenharmony_ci [5] Handley, M., Thaler, D. and R. Kermode, "Multicast-scope zone 91853a5a1b3Sopenharmony_ci announcement protocol (MZAP)", RFC 2776, February 2000. 91953a5a1b3Sopenharmony_ci 92053a5a1b3Sopenharmony_ci [6] Housley, R., "Cryptographic message syntax", RFC 2630, June 1999. 92153a5a1b3Sopenharmony_ci 92253a5a1b3Sopenharmony_ci [7] Mayer, D., "Administratively scoped IP multicast", RFC 2365, July 92353a5a1b3Sopenharmony_ci 1998. 92453a5a1b3Sopenharmony_ci 92553a5a1b3Sopenharmony_ci 92653a5a1b3Sopenharmony_ci 92753a5a1b3Sopenharmony_ci 92853a5a1b3Sopenharmony_ci 92953a5a1b3Sopenharmony_ci 93053a5a1b3Sopenharmony_ci 93153a5a1b3Sopenharmony_ci 93253a5a1b3Sopenharmony_ci 93353a5a1b3Sopenharmony_ci 93453a5a1b3Sopenharmony_ci 93553a5a1b3Sopenharmony_ci 93653a5a1b3Sopenharmony_ci 93753a5a1b3Sopenharmony_ci 93853a5a1b3Sopenharmony_ci 93953a5a1b3Sopenharmony_ci 94053a5a1b3Sopenharmony_ci 94153a5a1b3Sopenharmony_ci 94253a5a1b3Sopenharmony_ci 94353a5a1b3Sopenharmony_ci 94453a5a1b3Sopenharmony_ci 94553a5a1b3Sopenharmony_ci 94653a5a1b3Sopenharmony_ci 94753a5a1b3Sopenharmony_ci 94853a5a1b3Sopenharmony_ci 94953a5a1b3Sopenharmony_ci 95053a5a1b3Sopenharmony_ci 95153a5a1b3Sopenharmony_ci 95253a5a1b3Sopenharmony_ci 95353a5a1b3Sopenharmony_ci 95453a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 17] 95553a5a1b3Sopenharmony_ci 95653a5a1b3Sopenharmony_ciRFC 2974 Session Announcement Protocol October 2000 95753a5a1b3Sopenharmony_ci 95853a5a1b3Sopenharmony_ci 95953a5a1b3Sopenharmony_ciFull Copyright Statement 96053a5a1b3Sopenharmony_ci 96153a5a1b3Sopenharmony_ci Copyright (C) The Internet Society (2000). All Rights Reserved. 96253a5a1b3Sopenharmony_ci 96353a5a1b3Sopenharmony_ci This document and translations of it may be copied and furnished to 96453a5a1b3Sopenharmony_ci others, and derivative works that comment on or otherwise explain it 96553a5a1b3Sopenharmony_ci or assist in its implementation may be prepared, copied, published 96653a5a1b3Sopenharmony_ci and distributed, in whole or in part, without restriction of any 96753a5a1b3Sopenharmony_ci kind, provided that the above copyright notice and this paragraph are 96853a5a1b3Sopenharmony_ci included on all such copies and derivative works. However, this 96953a5a1b3Sopenharmony_ci document itself may not be modified in any way, such as by removing 97053a5a1b3Sopenharmony_ci the copyright notice or references to the Internet Society or other 97153a5a1b3Sopenharmony_ci Internet organizations, except as needed for the purpose of 97253a5a1b3Sopenharmony_ci developing Internet standards in which case the procedures for 97353a5a1b3Sopenharmony_ci copyrights defined in the Internet Standards process must be 97453a5a1b3Sopenharmony_ci followed, or as required to translate it into languages other than 97553a5a1b3Sopenharmony_ci English. 97653a5a1b3Sopenharmony_ci 97753a5a1b3Sopenharmony_ci The limited permissions granted above are perpetual and will not be 97853a5a1b3Sopenharmony_ci revoked by the Internet Society or its successors or assigns. 97953a5a1b3Sopenharmony_ci 98053a5a1b3Sopenharmony_ci This document and the information contained herein is provided on an 98153a5a1b3Sopenharmony_ci "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING 98253a5a1b3Sopenharmony_ci TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING 98353a5a1b3Sopenharmony_ci BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION 98453a5a1b3Sopenharmony_ci HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 98553a5a1b3Sopenharmony_ci MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 98653a5a1b3Sopenharmony_ci 98753a5a1b3Sopenharmony_ciAcknowledgement 98853a5a1b3Sopenharmony_ci 98953a5a1b3Sopenharmony_ci Funding for the RFC Editor function is currently provided by the 99053a5a1b3Sopenharmony_ci Internet Society. 99153a5a1b3Sopenharmony_ci 99253a5a1b3Sopenharmony_ci 99353a5a1b3Sopenharmony_ci 99453a5a1b3Sopenharmony_ci 99553a5a1b3Sopenharmony_ci 99653a5a1b3Sopenharmony_ci 99753a5a1b3Sopenharmony_ci 99853a5a1b3Sopenharmony_ci 99953a5a1b3Sopenharmony_ci 100053a5a1b3Sopenharmony_ci 100153a5a1b3Sopenharmony_ci 100253a5a1b3Sopenharmony_ci 100353a5a1b3Sopenharmony_ci 100453a5a1b3Sopenharmony_ci 100553a5a1b3Sopenharmony_ci 100653a5a1b3Sopenharmony_ci 100753a5a1b3Sopenharmony_ci 100853a5a1b3Sopenharmony_ci 100953a5a1b3Sopenharmony_ci 101053a5a1b3Sopenharmony_ciHandley, et al. Experimental [Page 18] 101153a5a1b3Sopenharmony_ci 1012