Multiply-encrypted message for filtering

A multiple encryption mechanism is described. In an embodiment, an encrypted electronic message and a first decryption key of a public-private key group is received. The first decryption key is operable to decrypt a set of properties for the encrypted electronic message without decrypting the encrypted electronic message. The encrypted electronic message and the set of message properties are encrypted using one or more encryption keys of the public-private key group. The set of properties for the encrypted electronic message is decrypted using the first decryption key. Using the decrypted set of properties, it is determined whether the encrypted electronic message should be flagged as a specified type of electronic message.

BACKGROUND

Detection of unwanted communications, compromised data, and malware has been an increasing concern as networked communication continues to grow at tremendous rates. With the growth of communication networks such as the Internet, the increasing amount of data interchange, and more recently the growth of cloud computing, the vulnerability of computers and servers through networked communication has become an increasingly significant issue. In particular, electronic mail communication has been plagued by high volumes of junk mail (e.g., spam and other unsolicited communications) as well as malicious communications (malware, phishing attempts, and other maliciously crafted electronic content). Some filtering solutions have been developed to combat these unwanted communications. For example, service providers have used heuristic detection and filtering to identify and quarantine unwanted communications. These heuristic approaches may rely on granting to a service provider access to messaging content to perform the filtering. While a user may employ encryption or other security measures to protect messages in transit, the user is not provided privacy from the service provider because the service provider requires access to the original message.

DETAILED DESCRIPTION

In general, this disclosure describes using multiple encryption levels for electronic messages in order to reduce the amount of information that a user needs to disclose to a messaging service provider in order to filter the electronic messages. In one embodiment, an encryption-decryption key pair may be generated for a user. The encryption-decryption key pair may include multiple decryption keys. A first decryption key operable to decrypt a limited set of message properties needed for message filtering may be distributed to the service provider. A second decryption key operable to decrypt the entire message may be distributed to the user. The encryption-decryption key pair may also have an associated verification function permitting the user to verify that the limited set of message properties were correctly generated without requiring the user to possess a copy of the first private key. The service provider may use the limited set of message properties to filter messages. The limited set of message properties provides sufficient information to determine if a message should be filtered (e.g., determine if the message is a spam message), without giving the service provider access to the entirety of the associated message. It should be appreciated that while the present disclosure describes embodiments in the context of electronic mail delivery, the principles described may be applied to other types of messaging and communications where encryption and filtering may be desired.

FIG. 1illustrates one example embodiment of a multiple encryption mechanism in accordance with the present disclosure.FIG. 1illustrates a messaging service110and a filtering service120in a service provider network108that are configured to provide filtered messaging services to users such as computer user101operating a computing device102and computer user104operating a computing device105. Computer user101may desire to send an electronic mail message to computer user104. Messages from computing device102may be encrypted using an encryption key103. An encrypted message130may be sent to computer user104via service provider108. Messaging service110may receive the encrypted message130and communicate with filtering service120to determine if the encrypted message130should be deleted, quarantined, or otherwise marked as an unwanted message. Filtering service120may use a decryption key125to generate a set of properties for the encrypted message130. The set of properties may provide sufficient information for the filtering service120to identify whether the encrypted message130exhibits characteristics sufficient to be flagged as an unwanted message with a predetermined degree of confidence. The filtering service120may provide an indication of the flagging to the messaging service110. The messaging service110may append the information from the filtering service120and send the flagged and encrypted message140to computer user104via computing device105. Computer user104may use a decryption key106to decrypt flagged and encrypted message140. However, based on the configuration of computer user104's messaging service, which may be provided by service provider108or a different service provider, the flagged and encrypted message140may be deleted, placed in a spam folder, or otherwise isolated if the message140is flagged as being an unwanted message.

In general, filtering is one method of protecting users from unwanted electronic mail such as spam. Such unwanted electronic mail typically involves messages sent to large numbers of recipients. The unwanted electronic mail may contain advertisements, hyperlinks that navigate to phishing sites or sites that are hosting malware and other malicious content, or malware such as executable file attachments. Some methods for filtering unwanted electronic mail may include message filtering based on the content of the email. Message filtering may involve processing an electronic mail message to classify the message according to specified criteria. Message filtering software may allow an electronic mail message to continue delivery to its destination unchanged. The message filtering software may also edit the message, redirect the message to a different location, or discard the message. The message filtering software may process a message using various techniques such as applying one or more tests for spam. For example, the message filtering software may scan the text of a message for known spam patterns such as by identifying certain words or expressions, assigning a score to each message based on the identifications, and if the score is above a predetermined value, the message may be flagged as a spam message. Message filtering may also involve using more complex methods such as statistical filtering, where messages may be marked as spam based on identification of specific statistical patterns in the messages based on word usage.

One drawback of message filtering is that a filtering service must access the contents of a message in order to apply a filtering technique as described above. If a user wishes to securely send a message using encryption, the filtering service will not be able to apply filtering techniques unless the filtering service is provided the keys to decrypt the message. Various aspects of the disclosure will now be described with regard to certain examples and embodiments, which are intended to illustrate but not to limit the disclosure. In the following detailed description, references are made to the accompanying drawings that form a part of the detailed description, and that show, by way of illustration, specific embodiments or examples. The drawings herein are not drawn to scale. Like numerals represent like elements throughout the several figures.

In various embodiments described herein, systems and methods are described for message filtering using a multiply-encrypted message.FIG. 2illustrates an example system for confidential mail filtering using a multiply-encrypted message. Referring toFIG. 2, a key generator205may construct a public-private key pair for a message recipient including at least a public key215for encrypting a message, a first private key220for partially decrypting the message, and a second private key225for fully decrypting the message. The key generator205may distribute the public key215to a sender210, for example by distributing the public key215using a public key infrastructure255. The key generator205may distribute the first private key220to a service provider230contracted to perform message filtering on behalf of a recipient235. The key generator205may distribute the second private key225to the recipient235.

The sender210may send an encrypted message240that was encrypted using the public key215to the recipient235via the service provider230. In one embodiment, the public-private key pair may include a pair of encryption keys E1and E2and a pair of decryption keys D1and D2where D1(E1(X))=X and D2(E2(X))=X for any input X. For example, a message encrypted using encryption key E1may be decrypted using decryption key D1, and a message encrypted using encryption key E2may be decrypted using decryption key D2. The sender210may cause generation of a message M and a message thumbprint T(M) of salient properties for message M. In one embodiment, the message thumbprint T(M) may preserve certain properties of the message M without allowing for the possibility of reconstructing the message M from the thumbprint T(M). In some embodiments, the thumbprint T(M) may preserve statistical properties that allow a specially-designed heuristic to make filtering decisions that are consistent, to some predetermined degree of confidence, with filtering decisions that would be made based on the original message.

In one embodiment, thumbprint T(M) may consist of a dictionary of the words in message M. For example, thumbprint T(M) may include at least a subset of the words contained in the message M such that the subset can be analyzed to detect presence of one or more indications of a spam message. The subset can also be analyzed to perform statistical analysis on the words in the subset. In another embodiment, thumbprint T(M) may consist of a weighted suffix tree based on the words in message M, wherein the weighted suffix tree includes the suffixes of the message content in a way that allows for implementation of various search operations. In other embodiments, thumbprint T(M) may consist of a Markov model based on message M or some other probabilistic model.

In one embodiment, the sender210may construct a message by concatenating message M and thumbprint T(M). For example, a multi-part Multipurpose Internet Mail Extensions (MIME) message may be generated with a first message part containing the message M encrypted with encryption key E1(i.e., E1(M)) and a second message part containing the thumbprint T(M) encrypted with encryption key E2(i.e., E2(T(M)). The multi-part MIME message may then be sent to the recipient235. In another embodiment, the sender210may cause generation of a message concatenating message M and thumbprint T(M) using onion layering by encrypting the message M using encryption key E1, concatenating encrypted message M with thumbprint T(M), and encrypting the concatenated message using encryption key E2(i.e., E2(E1(M)+T(M)).

In another embodiment, the public-private key pair may include a single encryption key E and a pair of decryption keys D1and D2where D1(E(X))=X for any input X. For example, a message encrypted using encryption key E may be decrypted using decryption key D1. Applying the decryption key D2to the same encrypted input E(X) may generate a partially-obscured input D2(E(X))=X′. Partially-obscured input X′ may preserve certain properties of the input X such that partially-obscured input X′ may be used as a thumbprint of the message. For example, partially-obscured input X′ may contain at least some of the trigrams of input X without preserving their order and allow for statistical analysis of the encrypted message without allowing for the possibility of reconstructing input X using X′. In this embodiment, the sender210may generate a message M, encrypt the message using encryption key E to generate message E(M), and send the message E(M) to recipient235. Service provider230may use decryption key D2to generate partially-obscured input D2(E(X))=X′ and use partially-obscured input X′ as a message thumbprint.

The service provider230may partially decrypt the encrypted message240using the first private key220to generate a partially decrypted message242. In one embodiment, the service provider230may run the partially decrypted message242through a mail filter245to generate a filter result250. For example, the service provider230may wish to provide a message filtering service that attempts to filter junk mail, spam, malware, or other unwanted communications. In one embodiment, the service provider230may provide mail filter245as part of its services. In other embodiments, the service provider230may interact with an outside service that provides access to mail filter245as a contracted service. Service provider230may send the partially decrypted message242to mail filter245to perform filtering based on the partially decrypted message242.

In one embodiment, the service provider230may generate a message thumbprint based at least in part on the encrypted message240and the first private key220. The service provider230may use the message thumbprint as input to the mail filter245. The service provider230may receive a filter result250from mail filter245. The filter result250may comprise data indicative of the result of running mail filter245on the message thumbprint, such as a Boolean flag indicating whether the encrypted message240is suspected of being an unwanted message.

In one embodiment, the service provider230may package the encrypted message240with filter result250for sending to the recipient235. For example, the filter result250may be attached to the encrypted message240using a message header, and the packaged message may be sent to the recipient.

In an embodiment, the service provider230may take one or more actions in response to receiving filter result250. If filter result250indicates that the encrypted message240is an unwanted message, then the service provide230may quarantine the encrypted message240or delete the encrypted message240. In this embodiment, any message forwarded to the recipient235by the service provider230may be assumed to not be flagged as an unwanted message and the service provider230is not explicitly required to include the filter result250in the forwarded messages.

The recipient235may fully decrypt the encrypted message240using the second private key225. In some embodiments, the recipient235may cause execution of a verification function260using the encrypted message240and fully decrypted message265to confirm that the partially decrypted message242correctly represented the message thumbprint of the encrypted message240.

In one embodiment, the recipient235may receive an encrypted message240and the message thumbprint from the service provider230. In some embodiments the message thumbprint may be encrypted. The recipient235may decrypt the encrypted message240using the second private key225to generate the original message. The recipient235may send the decrypted message265to the verification function260which may independently generate a message thumbprint based on the decrypted message265. The verification function260may independently encrypt the message thumbprint using the public key215. The verification function260may compare the independently generated encrypted message thumbprint with the encrypted thumbprint provided by the service provider230to verify that the provided encrypted thumbprint was correctly generated.

In another embodiment, the recipient235may receive an encrypted message240from the sender210and a message hash from the service provider230. The service provider230may hash the message thumbprint received from the sender210and forward the hash to the recipient235by, for example, including the hash with the filter result250. The recipient235may decrypt the encrypted message240to produce the decrypted message265and send the decrypted message265to verification function260. The verification function260may independently generate a message thumbprint based on the original message, hash the message thumbprint, and then compare the independently computed hashed message thumbprint with the received hashed message thumbprint to verify the received hashed message thumbprint.

The recipient235may make a message delivery determination based in part on the filter result250and message verification result270. For example, the recipient235may choose to discard messages that fail the verification function260. Alternatively, the recipient235may choose to quarantine or discard messages that pass the verification function260but are otherwise indicated as being an unwanted message based on the filter result250.

The examples illustrated inFIGS. 1 and 2describe embodiments in the context of an electronic message delivery infrastructure configured to deliver messages from a sender to a recipient via one or more service providers in communication with a message filtering service. However, the described principles may be used to provide secure message delivery with message filtering in other contexts. For example, in other embodiments, multiple encryption techniques as those discussed above may be used with filtering techniques to categorize encrypted data packets, data units, or data files by using encrypted thumbprints to identify salient properties of the encrypted data without compromising the encrypted data.

FIG. 3illustrates an example operational procedure for encrypting messages. Referring toFIG. 3, operation300begins the operational procedure. Operation300may be followed by operation302. Operation302illustrates receiving a first private key of an encryption key group. In one embodiment, the encryption key group may comprise a first public key operable to encrypt an electronic message. The encryption key group may also comprise the first private key which may be operable to decrypt a set of message properties for the electronic message. The encryption key group may also comprise a second private key operable to decrypt an entirety of the electronic message. The set of message properties may correspond to a message thumbprint that preserves certain properties of the electronic message without allowing for the possibility of reconstructing the electronic message from the thumbprint. Operation302may be followed by operation304. Operation304illustrates receiving an encrypted electronic message and thumbprint. As discussed above, the thumbprint may be operable to identify the set of message properties for the encrypted electronic message without reconstructing the entirety of the electronic message.

Operation304may be followed by operation306. Operation306illustrates causing decryption of the thumbprint using the first private key to identify the set of message properties. Operation306may be followed by operation308. Operation308illustrates causing filtering of the encrypted electronic message using the set of message properties to determine whether the electronic message is a specified type of electronic message. For example, the set of message properties can be used to determine if the electronic message is junk mail, spam, malware, or other unwanted communications. If it is determined the electronic message is a specified type of electronic message in operation310, then operation310may be followed by operation312. Operation312illustrates indicating that the electronic message is a specified type of electronic message. For example, an indication such as a Boolean flag may be provided indicating whether the encrypted message240is suspected of being an unwanted message. If the electronic message is not a specified type of electronic message, then operation310may be followed by operation314. Operation314illustrates indicating that the electronic message is not a specified type of electronic message. Operations312and314may be followed by operation316. Operation316illustrates verifying that the encrypted thumbprint was correctly generated based on the electronic message.

FIG. 4illustrates another example operational procedure for encrypting messages. Referring toFIG. 4, operation400begins the operational procedure. Operation400may be followed by operation402. Operation402illustrates receiving an encrypted electronic message and a first decryption key of a public-private key group. In one embodiment, the first decryption key may be operable to decrypt a set of properties for the encrypted electronic message without decrypting the encrypted electronic message. The encrypted electronic message and the set of message properties may encrypted using one or more encryption keys of the public-private key group. Operation402may be followed by operation404. Operation404illustrates decrypting the set of properties for the encrypted electronic message using the first decryption key.

Operation404may be followed by operation406. Operation406illustrates determining that the encrypted electronic message should be filtered using the decrypted set of properties. For example, it can be determined that the encrypted electronic message is an unwanted message and that the message should be quarantined. If the encrypted electronic message should be filtered, then operation406may be followed by operation408. Operation408illustrates indicating that the encrypted electronic message should be filtered. If the electronic message should not be filtered, then operation406may be followed by operation410. Operation410illustrates indicating that the encrypted electronic message should not be filtered.

FIG. 5illustrates one example of an environment including a group of computing systems in which aspects of the present disclosure may be implemented. As shown inFIG. 5, the example includes a second network510that includes server computers516and518. In particular, second network510may be connected to a first network500external to second network510. First network500may provide access to computers502and504.

First network500may be, for example, a publicly accessible network made up of multiple networks operated by various entities such as the Internet. Second network510may be, for example, a company network that is wholly or partially inaccessible from computing systems external to second network510. Computers502and504may include, for example, home computing systems that connect directly to the Internet (e.g., via a cable modem or a Digital Subscriber Line (DSL)).

In addition to server computers516and518of second network510, second network510may include a gateway520as discussed above. Second network510may further include additional networking devices such as a router514. Router514may manage communications within second network510, for example by forwarding packets or other data communications as appropriate based on characteristics of such communications (e.g., header information including source and/or destination addresses, protocol identifiers, etc.) and/or the characteristics of the second network (e.g., routes based on network topology, etc.). It will be appreciated that, for the sake of simplicity, various aspects of the computing systems and other devices of this example are illustrated without showing certain conventional details. Additional computing systems and other devices may be interconnected in other embodiments and may be interconnected in different ways.

Referring toFIG. 5, server computers516and518are part of second network510, and each server computer may be assigned a network address (not shown) in accordance with second network510. For example, the second network addresses may be unique with respect to the second network but not guaranteed to be unique with respect to other computing systems that are not part of second network510. As one example, Internet Protocol (IP) and other networking protocols may reserve groups or blocks of network addresses, with such reserved network addresses not being routable over networks external to the second network510. In such situations, different networks may each use the same network addresses within their networks, as the network addresses are locally unique to each network, but those network addresses may not be used for communications between a computing system of a different network and another computing system external to the network. IP addresses are used to illustrate some example embodiments in the present disclosure. However, it should be understood that other network addressing schemes may be applicable and are not excluded from the scope of the present disclosure.

In this example, to facilitate communications between server computers516and518of second network510and other external computing systems that are not part of second network510(e.g., computers502and504and/or other computing systems that are part of first network500), one or more gateway devices520may be used. In particular, one or more first network500addresses (not shown) may have previously been assigned for use in representing second network510. Such first network addresses may be routable over the Internet such that a communication that is sent by external computer502and that has one of second network510's first network addresses as its destination network address will be routed over the Internet to gateway device520. Furthermore, additional gateway devices (not shown) may be provided as needed.

Gateway device520may operate to manage both incoming communications to the second network510from first network500and outgoing communications from second network510to first network500. For example, if server computer516sends a message (not shown) to one of computers502in first network500, server computer516may create an outgoing communication that includes an external first network address (e.g., a public IP address) for computer502as the destination address and include a second network address (e.g., a private IP address) for server computer516as the source network address. Router514then uses the destination address of the outgoing message to direct the message to gateway device520for handling. In particular, in order to allow computer502to reply to the outgoing message, gateway device520may temporarily map one of the public network addresses for second network510to server computer516and modify the outgoing message to replace the source network address with the mapped first network address. Gateway device520may then update its mapping information with the new mapping, and forward the modified outgoing message to the destination computer502over the Internet.

If computer502responds to the modified outgoing message by sending a response incoming message (not shown) that uses the mapped first network address for server computer516as the destination network address, the response incoming message may be directed over the Internet to gateway device520. Gateway device520may then perform similar processing in reverse to that described above for the outgoing message. In particular, gateway device520may use its mapping information to translate the mapped first network address into the second network address of server computer516, modify the destination network address of the response incoming message from the mapped first network address to the second network address of server computer516, and forward the modified incoming message to server computer516. In this manner, at least some of the internal computers of second network510may communicate with external computing systems via temporary use of the first network addresses. Furthermore, in some situations, one or more of the internal computing systems of second network510may be mapped to use one of the first network addresses (e.g., to a unique combination of a first network address and a port number), such that external computing systems may initiate new incoming messages to the internal computing system by directing the new incoming messages to the mapped representative first network address/port as the destination network address of the new incoming messages.

FIG. 6depicts an example computing environment wherein aspects of the present disclosure can be implemented. Referring toFIG. 6, communications network630may, for example, be a publicly accessible network of linked networks and possibly operated by various distinct parties, such as the Internet. In other embodiments, communications network630may be a private network, such as, for example, a corporate or university network that is wholly or partially inaccessible to non-privileged users. In still other embodiments, communications network630may include one or more private networks with access to and/or from the Internet.

Communication network630may provide access to computers602. User computers602may be computers utilized by customers601or other customers of data center600. For instance, user computer602aor602bmay be a server, a desktop or laptop personal computer, a tablet computer, a wireless telephone, a personal digital assistant (PDA), an e-book reader, a game console, a set-top box, or any other computing device capable of accessing data center600. User computer602aor602bmay connect directly to the Internet (e.g., via a cable modem or a Digital Subscriber Line (DSL)). Although only two user computers602aand602bare depicted, it should be appreciated that there may be multiple user computers.

User computers602may also be utilized to configure aspects of the computing resources provided by data center600. In this regard, data center600might provide a Web interface through which aspects of its operation may be configured through the use of a Web browser application program executing on user computers602. Alternatively, a stand-alone application program executing on user computers602might access an application programming interface (API) exposed by data center600for performing the configuration operations. Other mechanisms for configuring the operation of the data center600, including deploying updates to an application, might also be utilized.

Servers616shown inFIG. 6may be standard servers configured appropriately for providing the computing resources described above and may provide computing resources for executing one or more applications. In one embodiment, the computing resources may be virtual machine instances619. In the example of virtual machine instances619, each of the servers616may be configured to execute an instance manager620aor620bcapable of executing the virtual machine instances619. The instance managers620may be a virtual machine monitor (VMM) or another type of program configured to enable the execution of virtual machine instances619on servers616, for example. As discussed above, each of the virtual machine instances619may be configured to execute all or a portion of an application.

It should be appreciated that this example describes a computing environment providing virtual machine instances, other types of implementations can be utilized with the concepts and technologies disclosed herein. For example, the embodiments disclosed herein might also be utilized with computing systems that do not utilize virtual machine instances.

In the example data center600shown inFIG. 6, a router614may be utilized to interconnect the servers616aand616b. Router614may also be connected to gateway610which is connected to communications network630. Router614may manage communications within networks in data center600, for example by forwarding packets or other data communications as appropriate based on characteristics of such communications (e.g., header information including source and/or destination addresses, protocol identifiers, etc.) and/or the characteristics of the private network (e.g., routes based on network topology, etc.). It will be appreciated that, for the sake of simplicity, various aspects of the computing systems and other devices of this example are illustrated without showing certain conventional details. Additional computing systems and other devices may be interconnected in other embodiments and may be interconnected in different ways.

In some embodiments, one or more of the virtual machine instances619of data center600may form part of one or more networks. In some embodiments, gateway610may be used to provide network address translation (NAT) functionality to a group of virtual machine instances and allow the virtual machine instances of the group to use a first group of internal network addresses to communicate over a shared internal network and to use a second group of one or more other external network addresses for communications between virtual machine instances of the group and other computing systems or virtual machine instances that are external to the group. An IP address is one example of a network address that is particularly applicable to the TCP/IP context in which some embodiments of the present disclosure can be implemented. The use of IP addresses herein is intended to be illustrative of network addresses and not limiting as to the scope of the described concepts.

Virtual machine instances619may be assigned a private network address (not shown). For example, the private network addresses may be unique with respect to their respective private networks but not guaranteed to be unique with respect to other computing systems that are not part of the private network. IP addresses are used to illustrate some example embodiments in the present disclosure. However, it should be understood that other network addressing schemes may be applicable and are not excluded from the scope of the present disclosure.

Gateway610may operate to manage both incoming communications to data center600from communication network630and outgoing communications from data center600to communication network630. For example, if virtual machine instance619asends a message (not shown) to computer602a, virtual machine instance619amay create an outgoing communication that includes network address on a first network (e.g., an external public IP address) for computer602aas the destination address and include a network address on a second network (e.g., a private IP address) for virtual machine instance619aas the source network address. Router614may then use the destination address of the outgoing message to direct the message to gateway610for handling. In particular, in order to allow computer602ato reply to the outgoing message, gateway610may temporarily map one of the public network addresses for data center600to virtual machine instance619aand modify the outgoing message to replace the private network address for the source network address with the mapped public network address. Gateway610may then update its mapping information with the new mapping, and forward the modified outgoing message to computer602aover the Internet.

If computer602aresponds to the modified outgoing message by sending a response incoming message (not shown) that uses the mapped public network address for virtual machine instance619aas the destination network address, the response incoming message may be directed over the Internet to gateway610. Gateway610may then perform similar processing in reverse to that described above for the outgoing message. In particular, gateway610may use its mapping information to translate the mapped public network address into the private network address of virtual machine instance619a, modify the destination network address of the response incoming message from the mapped public network address to the private network address of virtual machine instance619a, and forward the modified incoming message to virtual machine instance619a. In this manner, at least some of the internal computers of data center600may communicate with external computing systems via temporary use of the public network addresses. Furthermore, in some situations, one or more of the internal computing systems of data center600may be mapped to use one of the public network addresses (e.g., to a unique combination of a public network address and a port number), such that external computing systems may initiate new incoming messages to the internal computing system by directing the new incoming messages to the mapped representative public network address/port as the destination network address of the new incoming messages.

It should also be appreciated that data center600described inFIG. 6is merely illustrative and that other implementations might be utilized. Additionally, it should be appreciated that the functionality disclosed herein might be implemented in software, hardware, or a combination of software and hardware. Other implementations should be apparent to those skilled in the art. It should also be appreciated that a server, gateway, or other computing device may comprise any combination of hardware or software that can interact and perform the described types of functionality, including without limitation desktop or other computers, database servers, network storage devices and other network devices, PDAs, tablets, cellphones, wireless phones, pagers, electronic organizers, Internet appliances, television-based systems (e.g., using set top boxes and/or personal/digital video recorders), and various other consumer products that include appropriate communication capabilities. In addition, the functionality provided by the illustrated modules may in some embodiments be combined in fewer modules or distributed in additional modules. Similarly, in some embodiments the functionality of some of the illustrated modules may not be provided and/or other additional functionality may be available.

In at least some embodiments, a server that implements a portion or all of one or more of the technologies described herein, including the techniques to implement the functionality of a mail filter and messaging services may include a general-purpose computer system that includes or is configured to access one or more computer-accessible media.FIG. 7illustrates such a general purpose computing device700. In the illustrated embodiment, computing device700includes one or more processors710a,710b, and/or710n(which may be referred herein singularly as “a processor710” or in the plural as “the processors710”) coupled to a system memory720via an input/output (I/O) interface370. Computing device700further includes a network interface740coupled to I/O interface370.

In various embodiments, computing device700may be a uniprocessor system including one processor710or a multiprocessor system including several processors710(e.g., two, four, eight or another suitable number). Processors710may be any suitable processors capable of executing instructions. For example, in various embodiments, processors710may be general-purpose or embedded processors implementing any of a variety of instruction set architectures (ISAs), such as the x86, PowerPC, SPARC, or MIPS ISAs or any other suitable ISA. In multiprocessor systems, each of processors710may commonly, but not necessarily, implement the same ISA.

System memory720may be configured to store instructions and data accessible by processor(s)710. In various embodiments, system memory720may be implemented using any suitable memory technology, such as static random access memory (SRAM), synchronous dynamic RAM (SDRAM), nonvolatile/Flash-type memory or any other type of memory. In the illustrated embodiment, program instructions and data implementing one or more desired functions, such as those methods, techniques and data described above, are shown stored within system memory720as code725and data726.

In one embodiment, I/O interface770may be configured to coordinate I/O traffic between processor710, system memory720and any peripheral devices in the device, including network interface740or other peripheral interfaces. In some embodiments, I/O interface770may perform any necessary protocol, timing or other data transformations to convert data signals from one component (e.g., system memory720) into a format suitable for use by another component (e.g., processor710). In some embodiments, I/O interface370may include support for devices attached through various types of peripheral buses, such as a variant of the Peripheral Component Interconnect (PCI) bus standard or the Universal Serial Bus (USB) standard, for example. In some embodiments, the function of I/O interface370may be split into two or more separate components, such as a north bridge and a south bridge, for example. Also, in some embodiments some or all of the functionality of I/O interface370, such as an interface to system memory720, may be incorporated directly into processor710.

Network interface740may be configured to allow data to be exchanged between computing device700and other device or devices760attached to a network or networks750, such as other computer systems or devices as illustrated inFIGS. 5 and 6, for example. In various embodiments, network interface740may support communication via any suitable wired or wireless general data networks, such as types of Ethernet networks, for example. Additionally, network interface740may support communication via telecommunications/telephony networks such as analog voice networks or digital fiber communications networks, via storage area networks such as Fibre Channel SANs or via any other suitable type of network and/or protocol.

In some embodiments, a system memory may be used which is one embodiment of a computer readable storage medium configured to store program instructions and data as described above forFIGS. 1-7for implementing embodiments of the corresponding methods and apparatus. Portions or all of the multiple computer systems such as those illustrated herein may be used to implement the described functionality in various embodiments; for example, software components running on a variety of different devices and servers may collaborate to provide the functionality.

It will be appreciated that in some embodiments the functionality provided by the routines discussed above may be provided in alternative ways, such as being split among more routines or consolidated into fewer routines. Similarly, in some embodiments, illustrated routines may provide more or less functionality than is described, such as when other illustrated routines instead lack or include such functionality respectively, or when the amount of functionality that is provided is altered. In addition, while various operations may be illustrated as being performed in a particular manner (e.g., in serial or in parallel) and/or in a particular order, in other embodiments the operations may be performed in other orders and in other manners. Similarly, the data structures discussed above may be structured in different ways in other embodiments, such as by having a single data structure split into multiple data structures or by having multiple data structures consolidated into a single data structure, and may store more or less information than is described (e.g., when other illustrated data structures instead lack or include such information respectively, or when the amount or types of information that is stored is altered).