Skype protocol: Difference between revisions
Line 20: | Line 20: | ||
The Skype client's [[application programming interface]] (API) opens the network to software developers. The Skype API allows other programs to use the Skype network to get "[[white pages]]" information and manage calls. |
The Skype client's [[application programming interface]] (API) opens the network to software developers. The Skype API allows other programs to use the Skype network to get "[[white pages]]" information and manage calls. |
||
The Skype code is [[closed source]], and the protocol is not standardized<ref>http://support.skype.com/en_US/faq/FA153/Which-protocols-does-Skype-use |
The Skype code is [[closed source]], and the protocol is not standardized<ref>http://support.skype.com/en_US/faq/FA153/Which-protocols-does-Skype-use {{dl}}</ref>. Parts of the client use [[Internet Direct (Indy)]], an open source socket communication library.{{Citation needed|date=December 2008}} |
||
'''Protocol Detection''' |
'''Protocol Detection''' |
Revision as of 06:04, 8 September 2010
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
No issues specified. Please specify issues, or remove this template. |
This article may need to be rewritten to comply with Wikipedia's quality standards, as the article is too technical in its nature (see Talk Page). (August 2009) |
Part of a series on |
Skype |
---|
mobile applications |
Skype uses a proprietary Internet telephony (VoIP) network based on peer-to-peer architecture. The protocol has not been made publicly available by Skype and official applications using the protocol are closed-source.
The Skype network is not interoperable with most other VoIP networks without proper licensing from Skype. Digium, the main sponsor of Asterisk PBX released a driver licensed by Skype dubbed 'Skype for Asterisk' to interface as a client to the Skype network, however this still remains closed source.[1] Numerous attempts to study and/or reverse engineer the protocol have been undertaken to reveal the protocol, investigate security or to allow unofficial clients.
Peer-to-peer architecture
Skype was the first peer-to-peer VoIP network [2], requiring minimal centralized infrastructure. [citation needed]. The Skype user directory is decentralized and distributed among the clients, or nodes, in the network.
The network contains three types of entity: supernodes, ordinary nodes, and the login server. Each client maintains a host cache with the IP address and port numbers of reachable supernodes.
Any client with good bandwidth, no firewall, and adequate processing power can become a supernode. Supernodes relay communications for clients behind firewalls and Symmetric NAT. This puts an extra burden on those who connect to the Internet without NAT, as Skype may use their computers and Internet connections to relay other users' calls. [citation needed]
Supernodes are grouped into slots (9-10 supernodes), and slots are grouped into blocks (8 slots).
Protocol
Signaling is encrypted using RC4; however, the method only obfuscates the traffic as the key can be recovered from the packet. Voice data is encrypted with AES.[3]
The Skype client's application programming interface (API) opens the network to software developers. The Skype API allows other programs to use the Skype network to get "white pages" information and manage calls.
The Skype code is closed source, and the protocol is not standardized[4]. Parts of the client use Internet Direct (Indy), an open source socket communication library.[citation needed]
Protocol Detection
Many Networking and security companies claim to detect and control Skype's protocol for enterprise and carrier applications. While the specific detection methods used by these companies are often proprietary, Pearson's chi-square test and stochastic characterization with Naive Bayes classifiers are two approaches that were published in 2007.[5]
Preliminaries
Abbreviations that are used:
- SN: Skype network
- SC: Skype client
- HC: host cache
Skype client
The main functions of a Skype client are:
- login
- user search
- start and end calls
- media transfer
- presence messages
Login
A Skype client authenticates the user with the login server, advertises its presence to other peers, determines the type of NAT and firewall it is behind and discovers nodes that have public IP addresses.
To connect to the Skype network, the host cache must contain a valid entry. A TCP connection must be established (i.e. to a supernode) otherwise the login will fail.
1. start 2. send UDP packet(s) to HC 3. if no response within 5 seconds then 4. attempt TCP connection with HC 5. if not connected then 6. attempt TCP connection with HC on port 80 (HTTP) 7. if not connected then 8. attempt TCP connection with HC on port 443 (HTTPS) 9. if not connected then 10. attempts++ 11. if attempts==5 then 12. fail 13. else 14. wait 6 seconds 15. goto step 2 16. Success
After a Skype client is connected it must authenticate the username and password with the Skype login server. There are many different Skype login servers using different ports. An obfuscated list of servers is hardcoded in the Skype executable.
Skype servers are: "dir1.sd.skype.net:9010", "dir2.sd.skype.net:9010", "dir3.sd.skype.net:9010", "dir4.sd.skype.net:9010", "dir5.sd.skype.net:9010", "dir6.sd.skype.net:9010", "dir7.sd.skype.net:9010", "dir8.sd.skype.net:9010" "http1.sd.skype.net:80", "http2.sd.skype.net:80", "http3.sd.skype.net:80", "http4.sd.skype.net:80", "http5.sd.skype.net:80", "http6.sd.skype.net:80", "http7.sd.skype.net:80", "http8.sd.skype.net:80" Skype-SW connects randomly to 1-8.
On each login session, Skype generates a session key from 192 random bits. The session key is encrypted with the hard-coded login server's 1536-bit RSA key to form an encrypted session key. Skype also generates a 1024-bit private/public RSA key pair. An MD5 hash of a concatenation of the user name, constant string ("\nSkyper\n") and password is used as a shared secret with the login server. The plain session key is hashed into a 256-bit AES key that is used to encrypt the session's public RSA key and the shared secret. The encrypted session key and the AES encrypted value are sent to the login server.
On the login server side, the plain session key is obtained by decrypting the encrypted session key using the login server's private RSA key. The plain session key is then used to decrypt the session's public RSA key and the shared secret. If the shared secret match, the login server will sign the user's public RSA key with its private key. The signed data is dispatched to the super nodes.
Upon searching for a buddy, a super node will return the buddy's public key signed by Skype. The SC will authenticate the buddy and agree on a session key by using the mentioned RSA key.
UDP
UDP packets:
IP UDP Skype SoF Skype Crypted Data01
The Start of Frame (SoF) consists of:
- frame ID number (2 bytes)
- payload type (1 byte)
- obfuscated payload
- Ack/NAck packet
- payload forwarding packet
- payload resending packet
- other
Obfuscation Layer
The RC4 encryption algorithm is used to obfuscate the payload of datagrams.
- The CRC32 of public source and destination IP, Skype's packet ID are taken
- Skype obfuscation layer's initialization vector (IV).
The XOR of these two 32 bit values is transformed to a 80-byte RC4 key using an unknown key engine.
A notable misuse of RC4 in Skype can be found on TCP streams (UDP is unaffected). The first 14 bytes (10 of which are known) are xored with the RC4 stream. Then, the cipher is reinitialized to encrypt the rest of the TCP stream.[6]
TCP
TCP packets:
TCP Skype Init TCP packet
The Skype Init TCP packet contains
- the seed (4 bytes)
- init_str string 00 01 00 00 01 00 00 00 01/03
Low-level Datagrams
Almost all traffic is ciphered. Each command has its parameters appended in an object list. The object list can be compressed.
/ Object List ... -| Enc -> Cmd -> Encod ^ \ Compressed List ... -| Frag | | |------------------<---------------| Ack
NAck
Forward -> Forwarded..Message
Object Lists
An object can be a number, string, an IP:port, or even another object list. Each object has an ID. This ID identifies which command parameter the object is.
Object: Number IP:Port List of numbers String RSA key
Object List List Size (n) Object 1 . . Object n
Packet compression
Packets can be compressed. The algorithm is a variation of arithmetic compression that uses reals instead of bits.
Legal issues
Reverse engineering of the Skype protocol by inspecting/disassembling binaries is prohibited by the terms and conditions of Skype's license agreement. However there are legal precedents when the reverse-engineering is aimed at interoperability of file formats and protocols.[7][8][9] In the United States, the Digital Millennium Copyright Act grants a safe harbor to reverse engineer software for the purposes of interoperability with other software.[10][11] In addition, many countries specifically permit a program to be copied for the purposes of reverse engineering.[12]
References
- S.A Baset, H. Schulzrinne (September 14, 2004). "An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol" (PDF). Technical Report. Columbia University.
- P. Biondi and F. Desclaux (March 3, 2006). "Silver Needle in the Skype" (PDF).
- F. Desclaux and K. Kortchinsky (June 6, 2006). "Vanilla Skype - part 1" (PDF).
- F. Desclaux and K. Kortchinsky (June 17, 2006). "Vanilla Skype - part 2" (PDF).
- L. De Cicco, S. Mascolo, V. Palmisano (May 2007). "An Experimental Investigation of the Congestion Control Used by Skype VoIP" (PDF). WWIC 07. Springer.
{{cite web}}
: CS1 maint: multiple names: authors list (link) - L. De Cicco, S. Mascolo, V. Palmisano (December 9–11, 2008). "A Mathematical Model of the Skype VoIP Congestion Control Algorithm" (PDF). Proc. of IEEE Conference on Decision and Control 2008.
{{cite web}}
: CS1 maint: date format (link) CS1 maint: multiple names: authors list (link) - Dario Bonfiglio, Marco Melia, Michela Meo, Dario Rossi, Paolo Tofanelli (August 27–31, 2007). "Revealing Skype Traffic: When Randomness Plays With You". ACM SIGCOMM Computer Communication Review.
{{cite web}}
: CS1 maint: multiple names: authors list (link)
Notes
- ^ Skype for Asterisk – Production Released!, By pengler, August 31st, 2009, Digium - The Asterisk Company
- ^ (pg 11), An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol, Salman A. Baset and Henning Schulzrinne - Department of Computer Science, Columbia University, New York NY 10027, September 15, 2004
- ^ Introduction Skype analysis Enforcing anti-Skype policies, Skype uncovered Security study of Skype, Desclaux Fabrice, 7/11/2005, EADS CCR/STI/C
- ^ http://support.skype.com/en_US/faq/FA153/Which-protocols-does-Skype-use [dead link ]
- ^ Dario Bonfiglio et al. “Revealing Skype Traffic: When Randomness Plays with You,” ACM SIGCOMM Computer Communication Review, Volume 37:4 (SIGCOMM 2007), p. 37-48
- ^ Fabrice Desclaux, Kostya Kortchinsky (2006-06-17). "Vanilla Skype part 2" (PDF). RECON2006.
{{cite conference}}
: Unknown parameter|booktitle=
ignored (|book-title=
suggested) (help) - ^ Sega vs Accolade, 1992
- ^ Sony vs Connectix, 2000
- ^ Pamela Samuelson and Suzanne Scotchmer, "The Law and Economics of Reverse Engineering", 111 Yale Law Journal 1575-1663 (May 2002) [1]
- ^ 17 U.S.C. Sec. 1201(f).
- ^ WIPO Copyright and Performances and Phonograms Treaties Implementation Act
- ^ In the French "intellectual property" law set, there is an exception that allows any software user to reverse engineer it. See code de la propriété intellectuelle Template:Fr. This law is the national implementation of a piece of EU legislation: Council Directive 91/250/EEC, since then repealed by Directive 2009/24/EC of the European Parliament and of the Council of 23 April 2009 on the legal protection of computer programs