<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://learn.equalit.ie/mw/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://learn.equalit.ie/mw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bill</id>
		<title>learn.equalit.ie - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://learn.equalit.ie/mw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bill"/>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Special:Contributions/Bill"/>
		<updated>2026-05-21T21:18:02Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.23.1</generator>

	<entry>
		<id>https://learn.equalit.ie/wiki/Np1sec</id>
		<title>Np1sec</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Np1sec"/>
				<updated>2015-09-23T17:54:28Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: This changes update the existing protocol paper to bring it into line with the current implementation of the np1sec protocol&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Np1sec-web.jpg|frameless|center|(n+1)sec]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
{{DISPLAYTITLE:(n+1)sec}}&lt;br /&gt;
===Abstract===&lt;br /&gt;
&lt;br /&gt;
''In this document we present the first public draft of ''(n+1)sec'' - a secure multi-party communication protocol developed by eQualit.ie with support from the [https://www.opentechfund.org/ Open Technology Fund] and [https://crypto.cat/ Cryptocat]. We include the design rationale, choice of security features, adversarial models, schematic and high level specification of sub-protocols. A subsequent document will present security proofs and implementation details.''&lt;br /&gt;
&lt;br /&gt;
=I. INTRODUCTION=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;T&amp;lt;/span&amp;gt;he ''(n+1)sec'' project was inspired by [https://otr.cypherpunks.ca/Protocol-v3-4.0.0.html Off-The-Record] messaging protocol and subsequent efforts to explore a multiparty use-case for OTR in [GUVGC09]. ''(n+1)sec'' is currently developed for [https://github.com/cryptocat/cryptocat/wiki/mpOTR-Project-Plan Cryptocat] - a browser based XMPP chat platform and assumes its use-cases. Most importantly, ''(n+1)sec'' allows for secure multi-party key exchange and end-to-end encrypted communications without extensive computational requirements from the client. You can follow and contribute to the implementation of [https://github.com/equalitie/np1sec np1sec] on our Github pages. Future protocol iterations will consider a variety of other real-world use cases and be platform independent. Please use the [[Talk:Np1sec|Discussion]] page to ask questions and leave comments.&lt;br /&gt;
&lt;br /&gt;
In the following section we summarise relevant publications and describe their influence on this protocol. In [[#III._Design_rationale|Section III]], we describe our approach and choice of security features. In [[#IV._Security_Properties|Section IV]], we review the security properties within this protocol. In [[#V._Chat_Session_Model|Section V]] we give basic mathematical definition needed to model the chat session and security proofs for various security aspects of the protocol. [[#IV._Adversarial_Models|Section VI]] provides formal definitions and references to the adversarial models for each property. In [[#VII._Protocol_High_Level_Design|Section VII]] we describe various parts of the protocol and present choices for each sub protocol. In [[#VIII._''(n+1)sec''_Protocol:_Step_by_Step|Section VIII]], we present each of the ''(n+1)sec'' protocol steps at various stages in schematic and algorithmic format. We present our choice of primitives in [[#iX._Cryptographic_Primitives|Section IX]]. Finally, we define the work that [[#Next_Steps|remains to be done]] on this protocol and [[#XI._Acknowledgements|acknowledge]] the good people who have helped us get here.&lt;br /&gt;
&lt;br /&gt;
= II. History and literature review =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;T&amp;lt;/span&amp;gt;wo-party Off The Record messaging (OTR) was introduced in [BGB04] as an alternative to PGP for secure casual Internet chat by providing necessary forward secrecy and deniable transcript features. The paper proposes the use of symmetric encryption and message authentication in OTR for confidentiality and integrity, and the Diffie-Hellman key exchange for authenticating the other party in the chat. Since publication in 2004, it has defined the standard for secure Internet chat attracting a lot of academic attention and security analysis. The OTR protocol is now at [https://otr.cypherpunks.ca/Protocol-v3-4.0.0.html Version 3] and the [https://otr.cypherpunks.ca/index.php#downloads libotr software libraries] are continuously updated. Our research and literature review focused on the protocol presented in [BGB04] and the subsequent proposal for a multiparty use-case in [GUVGC09].&lt;br /&gt;
&lt;br /&gt;
In [RGK05], researchers point out that OTR’s approach to authenticate renewed ephemeral session keys is provided by the property of confidentiality and is therefore dependent on the secrecy of the conversation. Hence, breaking the secrecy of the conversation (e.g. by leaking the session key) will lead to false authentication as well. They offer two authenticated deniable key exchange protocols, which also provide forward secrecy, as a replacement for OTR’s original key exchange. Furthermore, they argue that forgeability and malleability do not have any mathematical consequence in improving deniability if the parties have been authenticated by a deniable key exchange scheme. They argue that as these properties pose potential security threats, it is desirable to omit them from the protocol entirely.&lt;br /&gt;
&lt;br /&gt;
An alternative appears in [BS07], using the Schnorr zero-knowledge proof and signature algorithm, to introduce a 4-round challenge-based authentication scheme that grants deniability to the two-round authenticated protocol described in [BVS05].&lt;br /&gt;
&lt;br /&gt;
[ACMP10] offers a more efficient protocol than [BS07] in the sense that ephemeral Diffie-Hellman elements are reusable to regenerate keys when some of the participants change. As such, it offers a one-round protocol to generate a key for a subgroup of the original conversation.&lt;br /&gt;
&lt;br /&gt;
An unauthenticated exchange of the OTR version identifier can pose a threat to authenticity as shown in [BM]: the adversary can force clients to downgrade to an older, (potentially insecure) version of the protocol. They also note the Diffie-Hellman key exchange failure in delivering authentication in the presence of an active adversary. Furthermore, they show that the early publication of MAC keys for the purpose of forgeability can easily enable the active adversary to forge messages during the conversation (instead of the intended forgeability after the conversation has ended). Finally, they argue that in an environment where the adversary is controlling the whole network, she can effectively disarm the protocol of its forgeability property.&lt;br /&gt;
&lt;br /&gt;
Various attempts have been made to construct an efficient multiparty (known as group) authenticated key exchange protocol. OTR authors proposed a generalisation of two-party OTR to a multiparty use-case in [GUVGC09]. However, they did not specify the cryptographic primitives, neither did they give a formal definition of the adversaries nor the proof of the algorithm’s security (reduction). Although a more robust key exchange is proposed, some primary performance analysis of the implementation of the key agreement protocol has been shown to be impractically slow, especially on mobile devices [Gun13a][Git11].&lt;br /&gt;
&lt;br /&gt;
[LVH13] proposes GOTR as an alternative to [GUVGC09] with a goal of improving on some of its security properties. A notable change is the use of p2p private channels to send message digest so as to establish transcript consistency and implicit message origin authenticity between users. GOTR also strives to improve on repudiability by considering deniability against an 'online judge' as well as forgeability for the entire transcript by a single party (this is possible in [GUVGC09] as long as a deniable AKE is being used). The idea of online repudiabilty relies on the judge controlling up to '''N-2''' parties while the two remaining &amp;quot;honest&amp;quot; parties are allowed to collude. This is slightly unusual for both repudiability and honesty. [LVH13] also proposes an involved contributory BD based key agreement scheme, which disregard room consistency and turns GOTR into a broadcast scheme (c.f. [[#Appendix_B:_Other_design_possibilities|Appendix B]]).&lt;br /&gt;
&lt;br /&gt;
=III. Design rationale =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;O&amp;lt;/span&amp;gt;ur approach for ''(n+1)sec'' design was based on the following requirements, in order of importance:&lt;br /&gt;
&lt;br /&gt;
# A protocol that is provably secure in a sufficiently strong adversarial model that addresses confidentiality, authenticity and forward secrecy&lt;br /&gt;
# Applicable to the [https://github.com/cryptocat/cryptocat/wiki/Design-and-Functionality Cryptocat XMPP use-case]&lt;br /&gt;
# Providing some degree of deniability when it does not negatively impact usability or our [[#IV._Security_Properties|security goals]]&lt;br /&gt;
# Addressing security flaws in [BGB04] and [GUVGC09]&lt;br /&gt;
&lt;br /&gt;
We designate the protocol suggested in [GUVGC09] as our starting point and apply various modifications to reach a desirable protocol  satisfying the above stated goals. &lt;br /&gt;
&lt;br /&gt;
A significant portion of our research suggested a better performing, more secure alternative to the key exchange protocol suggested in [GUVGC09]. Based on conclusions in [BM] and [RGK05], we are making the following design changes:&lt;br /&gt;
&lt;br /&gt;
* Using a more secure deniable key exchange algorithm, instead of naive Diffie-Hellman&lt;br /&gt;
&lt;br /&gt;
In designing ''(n+1)sec''’s deniable authentication and key agreement protocol, we have followed [ACMP10] by choosing a provably secure authenticated key exchange method and replacing the signature-based authentication with a deniable one. We have chosen the protocol introduced in [ACMP10] instead of [BS07], due to its superior efficiency. We abstract out the method where parties communicate their secret for additional flexibility.&lt;br /&gt;
&lt;br /&gt;
* Using a more practical algorithm, rather than the peer-to-peer signature key exchange&lt;br /&gt;
&lt;br /&gt;
We have chosen the two round SKEME-based Triple Diffie-Hellman deniable key authentication instead of the Schnorr signature scheme suggested in [BS07] because it saves us two critical rounds for authentication (even though it offers a slightly weaker form of deniability). We have also modified the protocol to represent the chat condition where participants sequentially join and leave the chat.&lt;br /&gt;
&lt;br /&gt;
* Omitting forgeability and malleability from the protocol and refraining from broadcasting the expired ephemeral authentication keys.&lt;br /&gt;
&lt;br /&gt;
Following conclusions in [RGK05] we have dropped forgeability (mandatory publication of ephemeral signature/MAC keys) and malleability from our requirements since protocol deniability is based on a deniable key exchange. This significantly improves protocol efficiency, a primary focus for ''(n+1)sec''. The deniability of the authentication scheme prevents users not present in a chat session from forging a part of the transcript, however it allows them to forge a whole session with false participants and a complete transcript.&lt;br /&gt;
&lt;br /&gt;
Another major departure from the suggested protocol in [GUVGC09] is in-session transcript authentication, which happens every time a participant receives or sends a message. Transcript authentication (referred to as transcript consistency check from here on) is an optimistic approach based on the assumption that the chat server is mandated to provides a reliable and orderly message delivery, as it is in the case of XMPP protocol. We can ensure transcript consistency whenever the underlying transport layer guarantees the reliable delivery of the messages in the same order for all participants. If however, the underlying protocol does not guarantee reliability either in delivery or order, we report the discrepancy in user's transcript compared to their peers but we do not attempt to correct the transport protocol's action (we offer detection but not recovery).&lt;br /&gt;
&lt;br /&gt;
We also equip ''(n+1)sec'' with heartbeat to ensure in-session forward secrecy, periodical consistency check and freshness. &lt;br /&gt;
&lt;br /&gt;
We propose the possibility of using block-based, rather than stream-based, encryption for the symmetric encryption primitives. &lt;br /&gt;
&lt;br /&gt;
Finally, other protocol design possibilities considered and the rationale for not pursuing them further is discussed in [[#Appendix_B:_Other_design_possibilities|Appendix B: Other design possibilities]]&lt;br /&gt;
&lt;br /&gt;
= IV. Security Properties =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;F&amp;lt;/span&amp;gt;ollowing from the design rationales proposed in Section[[''(n+1)sec''#Design_rationale|III]], we give an informal description of the properties which ''(n+1)sec'' aims to secure in a multi-party chat session:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Participant deniable authenticity'''&amp;lt;/span&amp;gt; based on their long term persistent identity: While a participant in a chat can be sure of another participant’s authenticity, they cannot prove their confidence to anybody else who has not actively participated in the chat session or who has not interacted with the authenticator prior to the session.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Message origin authenticity'''&amp;lt;/span&amp;gt; against both outsider intrusion and the impersonation of existing participants by other malicious participants in the session. This means that the user can be assured of the authenticity of the sender of each original message even if other participants in the room try to impersonate the sender and send messages on their behalf.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Confidentiality'''&amp;lt;/span&amp;gt; of the conversation so its content is not accessible or readable by an outsider.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Forward secrecy'''&amp;lt;/span&amp;gt; of the conversation, so its content remains inaccessible in the event that the long term private key of a participant (which represents their long term identity) is compromised after session key establishment. In addition in-session forward secrecy means that compromise of the ephemeral keys of a participant, or the session key during chat session which is live for long time, would reveal only a fraction of the transcript.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Room consistency'''&amp;lt;/span&amp;gt;, where all participants are confident that they have been participating in the same room; they are confident that everybody in the room believes that everybody else sees the same participant list as they do.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Transcript consistency'''&amp;lt;/span&amp;gt;, where all participants are confident that they have been participating in the same conversation; as the conversation continues, they are confident that they have been seeing the same sequence of messages.&lt;br /&gt;
&lt;br /&gt;
For each of these requirements, it is necessary to formalize the above mentioned properties against an adversarial model which addresses the requirements stated in [[#Design_rationale|Section III]]. The next section will introduce formal definitions covering these elements.&lt;br /&gt;
&lt;br /&gt;
= V. Chat Session Model =&lt;br /&gt;
&lt;br /&gt;
In modelling the chat session, in terms of the adversarial models and protocol specifications, the notation of [ACMP10] is followed. This notation is common to other publication on group key exchange such as [GBNM11], and is adherred to for consistency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;'''Definition V.1 Multi-party chat session'''&amp;lt;/span&amp;gt;'': Let &amp;lt;math&amp;gt;\mathcal{U} = \{U_1,...,U_m\}&amp;lt;/math&amp;gt; be the set of possible participants. A multi-party chat session is an ordered pair &amp;lt;math&amp;gt;S := (\mathcal{S}, sid)&amp;lt;/math&amp;gt; in which &amp;lt;math&amp;gt;\mathcal{S} \subset \mathcal{U}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;sid&amp;lt;/math&amp;gt; is the unique session id. Without loss of generality we assume &amp;lt;math&amp;gt;\mathcal{S} = \{U_1,...,U_n\}&amp;lt;/math&amp;gt; and we interchangeably refer to party &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; by index ''i''. Furthermore, it is assumed that party &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; is presented and identified verifiably by a long-term persistence key pair &amp;lt;math&amp;gt;(LPK_{U_i}, LSK_{U_i})&amp;lt;/math&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;'''Definition V.2 sub session'''&amp;lt;/span&amp;gt; After session ''S'' is established, A subset of participants  &amp;lt;math&amp;gt;\mathcal{T}\subset \mathcal{S}&amp;lt;/math&amp;gt; might want to start a session in which parties in &amp;lt;math&amp;gt;\mathcal{T}\backslash\mathcal{S}&amp;lt;/math&amp;gt; are excluded (for example when those parties leave the chatroom). In such a setting we say &amp;lt;math&amp;gt;T := (\mathcal{T}, sid^T)&amp;lt;/math&amp;gt; is a subsession of ''S''. When there is no need to specify the subsession of choice, we use &amp;lt;math&amp;gt;spid&amp;lt;/math&amp;gt; to refer to &amp;lt;math&amp;gt;sid^T&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;'''Definition V.3''' ''An'' '''authenticated group key exchange (AGKE)'''&amp;lt;/span&amp;gt; ''is Algorithm &amp;lt;math&amp;gt;\Pi&amp;lt;/math&amp;gt; which each honest party will execute in order to communicate (by means of sending, receiving or computing) a cryptographic secret - namely a key - among the other parties of a session. By &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; (or &amp;lt;math&amp;gt;\Pi_i&amp;lt;/math&amp;gt; when the underlying session is understood) we are referring to an instance of &amp;lt;math&amp;gt;\Pi&amp;lt;/math&amp;gt; which the party &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; executes to achieve the collective goal. Further more we define'':&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Session id as seen by &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt;'''&amp;lt;/span&amp;gt;'': Session id &amp;lt;math&amp;gt;sid&amp;lt;/math&amp;gt; will be derived during the execution of the protocol. The session id is computed by &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; (the instance of the protocol run by &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; for session ''S'') and is indicated by &amp;lt;math&amp;gt;sid^S_i&amp;lt;/math&amp;gt;, or &amp;lt;math&amp;gt;sid_i&amp;lt;/math&amp;gt; when there is no concern of confusion''&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Participant list'''&amp;lt;/span&amp;gt;'': &amp;lt;math&amp;gt;plist^S_i&amp;lt;/math&amp;gt; is the list of participants which &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; believes are participating in the chat session ''S''.'' When there is no ambiguity in the underlying session, we simply use &amp;lt;math&amp;gt;plist_i&amp;lt;/math&amp;gt; notation.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''key id'' is the serial number given to the P2P keys generated during the process of key exchange, is computed as &amp;lt;math&amp;gt;Hash(U_i|y_i|U_j|y_j)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Ephemeral key list'''&amp;lt;/span&amp;gt;'': &amp;lt;math&amp;gt;klist^S_i&amp;lt;/math&amp;gt; is the list of ephemeral public key &amp;lt;math&amp;gt;y_j = g^{x_j}&amp;lt;/math&amp;gt;'s of all participants which &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; believes they are using in the chat session ''S''.'' When there is no ambiguity in the underlying session, we simply use &amp;lt;math&amp;gt;klist_i&amp;lt;/math&amp;gt; notation instead. We use the notaion of &amp;lt;math&amp;gt;plist_i|klist_i&amp;lt;/math&amp;gt; to represent ordered concatenation of &amp;lt;math&amp;gt;U_i|y_i&amp;lt;/math&amp;gt; pairs as in &amp;lt;math&amp;gt;U_1|y_1|\dots|U_n|y_n&amp;lt;/math&amp;gt;. The order is assumed to be computable by all participants (lexicographically ordered using long term public key of participants, for example).&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Session key of &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt; as seen by &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt;'''&amp;lt;/span&amp;gt;'': &amp;lt;math&amp;gt;sk^S_i&amp;lt;/math&amp;gt; (or &amp;lt;math&amp;gt;sk_i&amp;lt;/math&amp;gt;) is the session key of session ''S'' as computed by &amp;lt;math&amp;gt;\Pi_i&amp;lt;/math&amp;gt;. It represents the cryptographic secret computed by AGKE, it can be a set of secrets. The essential defining factor is that it should become common knowledge for the session participants at the end of AGKE execution. Similarly we define &amp;lt;math&amp;gt;subk_i&amp;lt;/math&amp;gt; to represent the subsession key''&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Accepted state'''&amp;lt;/span&amp;gt;'': A party enters the accepted state if it has computed &amp;lt;math&amp;gt;sk^S_i&amp;lt;/math&amp;gt; and has detected no errors in the protocol.''&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Partnered instances'''&amp;lt;/span&amp;gt;'': Two instances &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt; are considered partnered if and only if both instances have accepted &amp;lt;math&amp;gt;sid_i=sid_j&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;plist_i = plist_j&amp;lt;/math&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
* A &amp;lt;span&amp;gt;'''correct'''&amp;lt;/span&amp;gt;'' AKGE algorithm is an AKGE which, when all &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; instances of AKE algorithm are initiated with access to a network which correctly forwards all messages without modification, all participants ultimately are partnered and all compute equal &amp;lt;math&amp;gt;sk^S_i&amp;lt;/math&amp;gt;’s''.&lt;br /&gt;
&lt;br /&gt;
When underlying session are not considered we may omit the super script &amp;lt;math&amp;gt;\_^S&amp;lt;/math&amp;gt; from all above notations.&lt;br /&gt;
&lt;br /&gt;
= VI. Threat Models and Adversarial Goals =&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt;dversarial models are explained as a game, in which the adversary's possibilitiy of winning the game should be considered in terms of their ability to break the cryptographic primitives.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Accordingly to the requirements discussed in Section [[''(n+1)sec''#Security_Properties|IV]], it is necessary to examine the algorithm in terms of following threat cases:&lt;br /&gt;
&lt;br /&gt;
# Deniable Authenticated key exchange (including a forward secrecy adversary)&lt;br /&gt;
# Message origin authenticity&lt;br /&gt;
# Confidentiality&lt;br /&gt;
# Transcript consistency&lt;br /&gt;
&lt;br /&gt;
The following sections will define adversarial scenarios which represent the above threats.&lt;br /&gt;
&lt;br /&gt;
==Deniable Authenticated Key Exchange Adversary==&lt;br /&gt;
Following the approach in [BoSt06] the model is divided into two adversaries: ''Authenticated Group Key Exchange'' and the ''Deniability Adversary''.&lt;br /&gt;
&lt;br /&gt;
As deniability is not our primary focus, we wil consider a weaker deniability adversarial model, which limits possible input similarly to the limitations considered by [GKR06]. This provision would disallow an input from the 'judge' and therefore saves an extra round of communication within the protocol.&lt;br /&gt;
&lt;br /&gt;
Because he t''(n+1)sec'' protocol runs a peer-to-peer key exchange and establishes parallel deniable authentication, we use the adversarial model from [ACMP10] for ''authenticated group key exchange''. This ensures the security of both group and peer-to-peer keys independently. The protocol also takes advantage of &amp;quot;single&lt;br /&gt;
round computation of a subgroup key&amp;quot;. Meaning that when a participant leaves the session remaining participants can re-establish a (sub)session with only one round of communication. In this circumstance, the model must also consider an adversary's attack against the subgroup key.&lt;br /&gt;
&lt;br /&gt;
We do not attempt to model resistance against internal key compromise impersonation (KCI) as defined [GBNM11].&lt;br /&gt;
&lt;br /&gt;
===Authenticated Key Exchange Adversary===&lt;br /&gt;
====Adversarial power====&lt;br /&gt;
&lt;br /&gt;
The following set of functions model the AKE adversarial threats. The adversary for the authenticated key exchange can mount an attack through a sequence of call to the functions, outlined below. The limitation on the order and condition of calling these functions is defined per adversary. We will re-use these definitions to demonstrate similar routes for other adversaries considered by the threat models in later sections.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Execute(&amp;lt;math&amp;gt;plist&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt;: asks all parties in the &amp;lt;math&amp;gt;plist&amp;lt;/math&amp;gt; to run (a new) AGKE protocol and &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; will receive the execution transcript, i.e.&amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; can eavesdrop.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Send(&amp;lt;math&amp;gt;\Pi^S_i,m&amp;lt;/math&amp;gt;)/(&amp;lt;math&amp;gt;U_i,m&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt; sends a message ''m'' to the instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;. We assume that ''m'' contains information to identify the sender &amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; will receive the execution transcript. Specifically, by sending &amp;lt;math&amp;gt;plist&amp;lt;/math&amp;gt; messages it forces &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; to initiate &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''SKE(&amp;lt;math&amp;gt;\Pi^S_i, spid_i&amp;lt;/math&amp;gt;)''': asks &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; to compute the subgroup key for the &amp;lt;math&amp;gt;spid_i&amp;lt;/math&amp;gt; subsession. In response, &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; will either send a message or compute the subgroup key &amp;lt;math&amp;gt;k_{spid_i}&amp;lt;/math&amp;gt; depending on the state of &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;. This can be invoked only once per input. &lt;br /&gt;
* &amp;lt;span&amp;gt;'''RevealGK(&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;)''': &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; gives &amp;lt;math&amp;gt;sk_i&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;\mathcal{A}_a&amp;lt;/math&amp;gt; if it has accepted (as defined in Definition III.3).&lt;br /&gt;
* &amp;lt;span&amp;gt;'''RevealSK(&amp;lt;math&amp;gt;\Pi^S_i, T&amp;lt;/math&amp;gt;)''': &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; gives the &amp;lt;math&amp;gt;subk^T_i&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;\mathcal{A}_a&amp;lt;/math&amp;gt; if it has been computed for subsession ''T''.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Corrupt(&amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt;: &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; gives its long term secret key to &amp;lt;math&amp;gt;\mathcal{A}_a&amp;lt;/math&amp;gt; (but not the session key).&lt;br /&gt;
&amp;lt;!--This is the power for KCI * &amp;lt;span&amp;gt;'''%% \item {\bf RevealState(&amp;lt;math&amp;gt;\Pi_i&amp;lt;/math&amp;gt;)}: reveal the internal state of &amp;lt;math&amp;gt;\Pi_i&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;\mathcal{A}_a&amp;lt;/math&amp;gt; (no longer available after acceptance).--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Adversary's challenges====&lt;br /&gt;
&lt;br /&gt;
The following set of functions model the adversary's challenges. These reveal either a random value or a key. The adversary's advantage in distinguishing the cases should be translatable into an attack against the GDH primitive for the protocol to be considered secure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span&amp;gt;'''TestGK(&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt;: To the ultimate goal of challenging the confidentially of &amp;lt;math&amp;gt;sk_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; can run TestGK(&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;) against ''U''. As a the result a random bit ''b'' is chosen, if &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; then &amp;lt;math&amp;gt;\mathcal{A}_a&amp;lt;/math&amp;gt; is given &amp;lt;math&amp;gt;sk_i&amp;lt;/math&amp;gt; the session key, otherwise a random value from the same probability distribution is given to &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt;. Obviously, this can only be invoked once and only on accepted participants.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''TestSK(&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt;: To the ultimate goal of challenging the confidentially of &amp;lt;math&amp;gt;subk^T_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; can run TestSK(&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;) against ''U''. The result depends on a a random chosen bit ''b'', if &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; then &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; is given &amp;lt;math&amp;gt;subk^{T}_i&amp;lt;/math&amp;gt; the subsession key, otherwise a random value from the same probability distribution is given to &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Definition of Adversaries and their advantages ===&lt;br /&gt;
&lt;br /&gt;
The following terminology is useful in simplifying the elimination of trivial adversarial threats. &lt;br /&gt;
&lt;br /&gt;
'''Definition VI.1''' Accepted &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;  is '''fresh''' if none of the following is true:&lt;br /&gt;
* RevealGK(&amp;lt;math&amp;gt;\Pi_j^s&amp;lt;/math&amp;gt;) for &amp;lt;math&amp;gt;U_j \in plist&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Corrupt(&amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;) invoked for any &amp;lt;math&amp;gt;U_j \in plist&amp;lt;/math&amp;gt; before any Send(&amp;lt;math&amp;gt;\Pi^S_i,.&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Definition VI.2''' A pair of &amp;lt;math&amp;gt;\Pi^S_i, spid^S_i&amp;lt;/math&amp;gt; is '''fresh''', if &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;  is accepted and if none of the following is true:&lt;br /&gt;
* RevealSK(&amp;lt;math&amp;gt;\Pi_j^s, spid^S_i&amp;lt;/math&amp;gt;) for &amp;lt;math&amp;gt;U_j \in plist&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Corrupt(&amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;) invoked for any &amp;lt;math&amp;gt;U_j \in plist&amp;lt;/math&amp;gt; before any Send(&amp;lt;math&amp;gt;\Pi^S_i,.&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Definition VI.3''' An ''AKE Adversary for the join key agreement'' &amp;lt;math&amp;gt;\mathcal{A}_{join}&amp;lt;/math&amp;gt; is a probabilistic polynomial time algorithm (ppt) which can invoke all the functions given above with a&lt;br /&gt;
condition that the TestGK is invoked '''at least once''' against a fresh instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; which stays fresh until the end of the game. The game ends when &amp;lt;math&amp;gt;\mathcal{A}_{join}&amp;lt;/math&amp;gt; outputs its guess for ''b''. We say a key exchange protocol is secure if the following function is negligible:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
max_{\forall \mathcal{A}_{join}}|2Pr(Output(\mathcal{A}_{join}) = b) - 1|&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly we define &amp;lt;math&amp;gt;\mathcal{A}_{leave}&amp;lt;/math&amp;gt; the Adversary leaving the session:&lt;br /&gt;
&lt;br /&gt;
'''Definition VI.4''' An ''AKE Adversary for the leave key agreement'' &amp;lt;math&amp;gt;\mathcal{A}_{leave}&amp;lt;/math&amp;gt; is a ppt which can invoke all the functions given above with the condition that one of the invocations of TestSK is invoked against a fresh instance &amp;lt;math&amp;gt;(\Pi^S_i, spid_i)&amp;lt;/math&amp;gt; which stays fresh till the the end of the game. The game ends when &amp;lt;math&amp;gt;\mathcal{A}_{join}&amp;lt;/math&amp;gt; outputs its guess for ''b'' for that invocation. We say a key exchange protocol is secure if the following function is negilgible:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
max_{\forall \mathcal{A}_{leave}}|2Pr(Output(\mathcal{A}_{leave}) = b) -1|&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Forward Secrecy Adversary===&lt;br /&gt;
&lt;br /&gt;
We do not define an independent forward secrecy adversary. Forward secrecy can be derived by resistance against the confidentiality adversary as well incorporating a forward secure key exchange as described in [GBN10]. The adversaries of Definition VI.3 and VI.4, are able to ''Corrupt'' users after the communication of DH secrets. Therefore they can trivially break an AKE without forward secrecy. In this sense, the resistance against forward secrecy adversary is included in AKE adversarial model.&lt;br /&gt;
&lt;br /&gt;
===Deniability Adversary===&lt;br /&gt;
&lt;br /&gt;
We use the deniability adversary of [BoSt06], however following the path of [GRK06], we limit the security input of the deniability adversary in order to prevent the adversary from receiving input from the ''judge''.&lt;br /&gt;
&lt;br /&gt;
'''Definition VI.5''' A '''Deniability Adversary '' &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt; with bound &amp;lt;math&amp;gt;q_c&amp;lt;/math&amp;gt; and security input &amp;lt;math&amp;gt;Aux&amp;lt;/math&amp;gt; is a ppt algorithm which can invoke Send and Reveal as desired and Corrupt as many as &amp;lt;math&amp;gt;q_c&amp;lt;/math&amp;gt; times. At the end, &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt; will output a transcript &amp;lt;math&amp;gt;T_{\mathcal{A}_{deny}}(Aux)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Definition VI.6''' For each &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt;, we define a ''simulator'' &amp;lt;math&amp;gt;\mathcal{S}_{deny}&amp;lt;/math&amp;gt;, is a ppt algorithm which receives the same input as &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt;. It can invoke ''Corrupt'' &amp;lt;math&amp;gt;q_c&amp;lt;/math&amp;gt; times in addition to ''Send'' and ''Reveal'' but only against corrupted instances. It terminates by outputting a transcript &amp;lt;math&amp;gt;T_{\mathcal{S}_{deny}(Aux)}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
'''Definition VI.7''' A ''deniability judge'' &amp;lt;math&amp;gt;\mathcal{J}&amp;lt;/math&amp;gt; with security input &amp;lt;math&amp;gt;Aux&amp;lt;/math&amp;gt; is a ppt algorithm which can invoke arbitrary number of deniability adversaries &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt; with security input &amp;lt;math&amp;gt;Aux&amp;lt;/math&amp;gt;. On each execution of &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt; a corresponding &amp;lt;math&amp;gt;\mathcal{S}_{deny}&amp;lt;/math&amp;gt; runs with the same input. At the end a confidential random bit ''b'' is generated, and either &amp;lt;math&amp;gt;T_{\mathcal{A}_{deny}}(Aux)&amp;lt;/math&amp;gt; or &amp;lt;math&amp;gt;T_{\mathcal{S}_{deny}}(Aux)&amp;lt;/math&amp;gt;  is presented to  &amp;lt;math&amp;gt;\mathcal{J}&amp;lt;/math&amp;gt; based on whether &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; or 0 respectively. &lt;br /&gt;
&lt;br /&gt;
'''Definition VI.8''' We call a Group AKE deniable with respect to input set &amp;lt;math&amp;gt;Aux&amp;lt;/math&amp;gt;, if the following advantage is negligible:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
max_{\forall \mathcal{J}}|2Pr(Output(\mathcal{J}, Aux) = b) -1|&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to [GRK06], we claim that the AKE presented in this paper is deniable when &amp;lt;math&amp;gt;Aux&amp;lt;/math&amp;gt; is equal to the set of valid messages eavesdropped by &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt; during other sessions. This, in particular, excludes a transcript computed by &amp;lt;math&amp;gt;\mathcal{J}&amp;lt;/math&amp;gt; such as a group element whose discrete logarithm is only known to &amp;lt;math&amp;gt;\mathcal{J}&amp;lt;/math&amp;gt; (This means &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt; is given &amp;lt;math&amp;gt;g^a&amp;lt;/math&amp;gt; but is unaware of ''a'').&lt;br /&gt;
&lt;br /&gt;
==Secure Multiparty Channel Adversary==&lt;br /&gt;
The desirable way to define an adversary for a multiparty chat session is a secure channel model similar to the two-party secure channels described in [CaKr01] and [KPW13]. However, defining such a model is outside of our current scope. It is desirable to later improve the security of the protocol bu considering such a model at a later stage. At present, we use a per message model for confidentiality and origin authenticity.&lt;br /&gt;
&lt;br /&gt;
==Message Origin Authentication Adversary==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt;s each participant executes a sign and encrypt function before sending their authenticated ephemeral signing key, the message origin adversary model is based on a typical adversary for a signature scheme such as the one presented in [PVY00].&lt;br /&gt;
&lt;br /&gt;
===Adversarial power===&lt;br /&gt;
&lt;br /&gt;
In addition to adversarial functions defined in section 1.1.1. we must define the following function to allow for the adversary using the chosen-message attack.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span&amp;gt;'''MakeSend(&amp;lt;math&amp;gt;\Pi^S_i,\Pi^S_j, m&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt; causes the &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; to sign and send a valid message ''m'' to instance &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; will receive the transcript including the signature.&lt;br /&gt;
&lt;br /&gt;
===Definition of Adversary===&lt;br /&gt;
&lt;br /&gt;
'''Definition VI.9''': ''Message Origin Authentication Adversary'' &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; is a polynomial time algorithm which has access to the '''Corrupt''', '''Send''', '''Reveal''' and '''MakeSend''' functions. The output of the algorithm should be a message ''m'' sent to instance &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt;. The scheme is secure against Message Origin Adversary if the probability in which &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt; believes that ''m'' has originated from an uncorrupted participant &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; is negligible.&lt;br /&gt;
&lt;br /&gt;
==Message Confidentiality Adversary ==&lt;br /&gt;
&lt;br /&gt;
The goal of adversary &amp;lt;math&amp;gt;\mathcal{A}_{conf}&amp;lt;/math&amp;gt; is to read, at least, part of the communications transcript during the session.&lt;br /&gt;
&lt;br /&gt;
===Adversary's challenges===&lt;br /&gt;
The following set of functions model the confidentiality adversary's challenges. These reveal either a random value or an encrypted message. The adversary's advantage in distinguishing the cases should be translatable into an attack against the block cipher, AES in this case.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span&amp;gt;'''TestM(&amp;lt;math&amp;gt;\Pi^S_i, m&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt;: To the ultimate goal of challenging the indistinguishibility of &amp;lt;math&amp;gt;E(m)&amp;gt;&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mathcal{A}_{conf}&amp;lt;/math&amp;gt; can execute TestM(&amp;lt;math&amp;gt;\Pi^S_i, m&amp;lt;/math&amp;gt;) against &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt;. As a result a random bit ''b'' is chosen, if &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; then &amp;lt;math&amp;gt;\mathcal{A}_{conf}&amp;lt;/math&amp;gt; is given &amp;lt;math&amp;gt;E_{s_k}(m)&amp;lt;math&amp;gt;, the encrypted message, otherwise a random value from the same probability distribution is given to &amp;lt;math&amp;gt;\mathcal{A}_{conf}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Definition of Adversaries and their advantages===&lt;br /&gt;
&lt;br /&gt;
'''Definition 1''' A ''Confidentiality Adversary'' &amp;lt;math&amp;gt;\mathcal{A}_{conf}&amp;lt;/math&amp;gt; is a ppt which can invoke all the functions given in sections [[''(n+1)sec''#Adversarial_power|IV.1.1.1]] and [[''(n+1)sec''#Adversarial_power|IV.1.1.3]] with the condition that one of the invocations of TestM is invoked against an instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; where all instances in session ''s'' are fresh and stay fresh till the end of the game. The game ends when &amp;lt;math&amp;gt;\mathcal{A}_{conf}&amp;lt;/math&amp;gt; outputs its guess for ''b'' for that invocation. We say that the protocol is secure if the following function is negligible:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
max_{\forall {A}_{conf}}|2Pr(Output(\mathcal{A}_{conf}) = b) -1|&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Consistency Adversary==&lt;br /&gt;
In ''(n+1)sec'' protocol, we attempt to ensure the consistency among participants all along the session incrementally, i.e. assuring consistency after receiving each message in a timely manner. However, we do not model the incremental aspect of consistency into the adversarial model, for the sake of simplicity.&lt;br /&gt;
&lt;br /&gt;
'''Definition 1''' ''Transcript Consistency Adversary'' &amp;lt;math&amp;gt;\mathcal{A}_{cons}&amp;lt;/math&amp;gt; is given the ability to invoke all functions in sections [[''(n+1)sec''#Adversarial_power|IV.1.1.1]] and [[''(n+1)sec''#Adversarial_power|IV.1.1.3]]. We say the protocol is secure against ''Consensus Adversary'' if at least two uncorrupted accepted instances &amp;lt;math&amp;gt;\Pi^S_i, \Pi^S_j&amp;lt;/math&amp;gt; possess the transcripts chain &amp;lt;math&amp;gt;TransChain_{\Pi^S_i}(l) \neq TransChain_{\Pi^S_j}(l)&amp;lt;/math&amp;gt; and they believe they have the &amp;lt;math&amp;gt;TransChain_{\Pi^S_i}(l) = TransChain_{Pi^S_j}(l) with non-negligible probability.&lt;br /&gt;
&lt;br /&gt;
For definition of &amp;lt;math&amp;gt;TransChain_{\Pi^S_i}(l)&amp;lt;/math&amp;gt; see Section [[''(n+1)sec''#Definitions_and_assumptions|VII.4.1]].&lt;br /&gt;
&lt;br /&gt;
= VII. Protocol High Level Design =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;T&amp;lt;/span&amp;gt;o achieve the security properties listed in [[#IV._Security_Properties|Section IV]], we break the protocol into the following sub-protocols:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span&amp;gt;'''Deniable authenticated signature key and session key exchange'''&amp;lt;/span&amp;gt;, where participants deniably authenticate each other and agree on session key(s), while also exchanging ephemeral signing keys&lt;br /&gt;
# &amp;lt;span&amp;gt;'''Communication'''&amp;lt;/span&amp;gt;, where parties send authenticated confidential messages&lt;br /&gt;
# &amp;lt;span&amp;gt;'''Transcript consistency verification'''&amp;lt;/span&amp;gt;, where parties verify that all have received and seen an identical transcript in the same order, since the start of the chat session after receiving each messages.&lt;br /&gt;
&lt;br /&gt;
Our choice of sub-protocols for ''(n+1)sec'' followed suggestions made in [BGB04] and [GUVGC09], except where there has been a practical or security-related reason to deviate from those recommendations.&lt;br /&gt;
&lt;br /&gt;
In the following section we briefly describe our choice of the sub-protocols for each of the required tasks for a multi-party chat session.&lt;br /&gt;
&lt;br /&gt;
== '''VII.1 Design of Deniable Authenticated Signature Key Exchange'''==&lt;br /&gt;
&lt;br /&gt;
We have chosen our deniable signature key exchange protocol following the conclusions in [Gun13b] - by identifying a secure key exchange protocol that satisfies our needs. We then apply the triple Diffie-Hellman authenticated exchange to grant it properties of deniability [Ma13]. Subsequently, one can apply the same approach presented in [Gun13b] to communicate ephemeral signature keys during the key establishment process. However, for efficiency, we use the same ephemeral Diffie-Hellman private and public values used to deniably authenticate users and generate secret shares to produce ephemeral signatures.&lt;br /&gt;
&lt;br /&gt;
For the choice of the base authenticated key exchange protocol, we suggest a variant based on [ACMP10]. The rationale for the choice is laid out as follows:&lt;br /&gt;
&lt;br /&gt;
* The base design of the protocol in [ACMP10] is the same as the base for [BVS05] (recommended by [Gun13a]). However, the protocol presented in [ACMP10] is simpler.&lt;br /&gt;
* [ACMP10] offers a peer-to-peer key exchange with no extra rounds, if needed.&lt;br /&gt;
* [BVS05] and [ACMP10] are superior to the widely studied [BCPQ01] and its dynamic variation [BCP01] both in security and performance (&amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt; rounds).&lt;br /&gt;
* [BVS05] has been suggested by [Gun13b] for the reason described in [Gun13a]. We believe that the new deniable authentication approach, as it is similar to the SKEME protocol, satisfies the properties of deniability which [BVS05] considered crucial aside from the cooperating judge.&lt;br /&gt;
* Security analysis of [GBNM11] and [BCGNP08] has found that [BVS05] is provably secure against all attacks (including the insider attacks) that the papers consider.&lt;br /&gt;
* It is a two-round protocol and hence offers competitive efficiency considering the security property that it provides.&lt;br /&gt;
&amp;lt;!--* [BVS05] has existed for years and its various security aspects have been investigated by several researchers including [GBNM11] and [BCGNP08] which gives [BVS05] an advantage over newer algorithms.!--&amp;gt;&lt;br /&gt;
* [ACMP10] only needs one round of key re-agreement in the case of a participant leaving the chat, while [BVS05] enforces re-computation of Diffie-Hellman ephemeral keys and hence needs a minimum of two rounds plus overhead of re-authenticating the new ephemeral keys. This can significantly improve the efficiency of casual chat sessions where participants frequently enter and exit the chat.&lt;br /&gt;
* Although the Schnorr based algorithm suggested in [BVS05] satisfies a more comprehensible deniable model, triple Diffie-Hellman authenticated key exchange only needs two rounds of communication and can be done alongside the key agreement steps, while the Schnorr based algorithm of [BVS05] needs four rounds.&lt;br /&gt;
* Although key exchange algorithms based on the standard model are considered theoretically more secure than those based on the random oracle model, there has been no proposal for a 2-round protocol in the standard model that promises forward secrecy. Therefore, due to the importance of usability and efficiency in our approach, we opted to for a ROM based protocol such as described by [BVS05] and [ACMP10].&lt;br /&gt;
&lt;br /&gt;
===VII.1a Sharing a secret among the group===&lt;br /&gt;
All AGKE descriptions take the necessary steps to share a common secret confidentially among the group members along side  other operations such as authentication and insuring partnership. To insure forward secrecy these methods mostly rely upon a P2P Deffie-Hellman key exchange. Most AGKE descriptions rely on sharing an equation and solving a specific linear system described in [[''(n+1)sec''#GroupEnc and GroupDec Functions|IX.4]].&lt;br /&gt;
&lt;br /&gt;
We abstract this step as GroupEnc/GroupDec primitive, to allow for alternative designs which do not interact with the rest of the protocol and might offer other benefits. For example the &amp;quot;Naive peer-to-peer&amp;quot; primitive [[''(n+1)sec''#GroupEnc_and_GroupDec Functions|IX.4]] trades simplicity and generalizability (to a broadcast scheme c.f. [[''(n+1)sec''#VII.2 Other design possibilities|Section VII.2]]) for bandwidth consumption. &lt;br /&gt;
&lt;br /&gt;
== '''VII.3 Message Authentication''' ==&lt;br /&gt;
&lt;br /&gt;
As message authentication needs to be resistant to malicious insiders, following the outline of [GUVGC09], ''(n+1)sec'' signs each message using a public key signature scheme. The messages are signed with the ephemeral key of the sender. The authenticity of the origin can be verified by the public ephemeral key of the party distributed during the key exchange period.&lt;br /&gt;
&lt;br /&gt;
== '''VII.4 Transcript Ordering and Consistency''' ==&lt;br /&gt;
&lt;br /&gt;
Since each message sent by any one participant is signed by the ephemeral private key generated for that specific session, it is not possible for the internal or external adversary to forge a message on behalf of an uncorrupted participant.&lt;br /&gt;
&lt;br /&gt;
However, if the adversary is controlling the network structure, denial or delay of service is always possible. The consistency of the transcript (i.e. all participants see the same transcript in the same order) relies on the means of transport guaranteeing reliable delivery, with a single order, to every participant. In other words, we are verifying the ''reception'' of the message by the intended ''recipients''.&lt;br /&gt;
&lt;br /&gt;
By assuring transcript consistency, we also preventing &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; from sending different messages to &amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;U_k&amp;lt;/math&amp;gt; while they believe they are seeing the same conversation. In absence of transcript consistency, when a central server is managing the chatroom, this attack requires &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; to conspire with server, which is permeable in ''(n+1)sec'' threat model in accordance with the definition of transcript consistency in [GUVGC09].&lt;br /&gt;
&lt;br /&gt;
The protocol offered in this document examines the transcript for such consistency. In the case that the underlying transport fails to provide this level of consistency, clearly the consistency test will fail. In this sense, failure of consistency does not distinguish between malicious activities or the absence of a reliable transport.&lt;br /&gt;
&lt;br /&gt;
''(n+1)sec'' performs transcript authentication whenever a message is received. This is to guarantee consistency and protect the protocol against the transcript consistency attack. The procedure is similar to the procedure described in [GUVGC09], with two major differences:&lt;br /&gt;
&lt;br /&gt;
* We require additionally that message order be preserved for the following reasons:&lt;br /&gt;
&lt;br /&gt;
# XMPP, as the main protocol considered for this design, delivers messages to all clients in the same order.&lt;br /&gt;
# The ''(n+1)sec'' protocol detects if the adversary has manipulated the order of the messages rather than only dropping undesirable messages&lt;br /&gt;
# It is simpler to authenticate an ordered transcript compared to an unordered transcript.&lt;br /&gt;
&lt;br /&gt;
* We also require that each participant updates all other participants about their view of the session transcript every time they send a message, along with requiring heartbeat, this ensures that participants are aware whether or not they are all seeing the same transcript during the session.&lt;br /&gt;
&lt;br /&gt;
There are some cases where XMPP can fail our reliability assumption. In such cases, our consistency checks will fail. More advanced end-to-end recovery techniques are able to rescue such a scenario. We do not specify such techniques currently, though later versions of the protocol may rectify this.&lt;br /&gt;
&lt;br /&gt;
=== Definitions and assumptions ===&lt;br /&gt;
'''Transport assumption''':&lt;br /&gt;
We assume the central server reliably delivers messages to everyone, including the original sender, in the same order.&lt;br /&gt;
&lt;br /&gt;
'''Definition''' Each message ''M'' (sent after session S has been established) has an implicit server-sequence-number ''seqnum(M)'', a receive-parent: ''parent(M)'' (or recv-parent) the seqnum of last message the sender has received before sending ''M'' and a sender-sequence-number ''own-seqnum(M)''. We interchangeable use ''m'' when refering to both a message and its seqnum.&lt;br /&gt;
&lt;br /&gt;
Once a message ''M'' with seqnum ''m'' is received by instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; from the server (including participants own messages sent), a &amp;lt;math&amp;gt;TranscriptChain^S_i[m]&amp;lt;/math&amp;gt; may be calculated recursively as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;TrascriptChain^S_i[m] := (M, Hash(TranscriptChain^S_i[m - 1]))&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(we define TrascriptChain[0] = (sk^S_i, sid_i))&lt;br /&gt;
&lt;br /&gt;
A new message ''M'' contains ''p'' the seqnum of recv-parent of ''m'', &amp;lt;math&amp;gt;Hash(TranscriptChain^S_i[p])&amp;lt;/math&amp;gt;  and ''own-seqnum(M)''.&lt;br /&gt;
&lt;br /&gt;
* We say instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; has ''accepted'' message ''m'' if it has been received by &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;, then decrypted-verified.&lt;br /&gt;
&lt;br /&gt;
* We say instances &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt; have reached mutual consistency for message ''m'' if both accepted message ''m'' and have calculated the same hash of &amp;lt;math&amp;gt;TranscriptChain(m)&amp;lt;/math&amp;gt; and verified &amp;lt;math&amp;gt;H_j(TranscriptChain^S_i[m])) == H_i(TranscriptChain^S_i[m])&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* We say session ''S'' has reached consistency on message  ''m'', if all instances &amp;lt;math&amp;gt;\Pi^S_i, \Pi^S_j \in plist^S&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt; have reached mutual consistency.&lt;br /&gt;
&lt;br /&gt;
=== Server order ===&lt;br /&gt;
All clients see the same message order from the server.  All messages are sent to all users.  Aside from the presence messages (messages which indicate a user is joining or leaving a chatroom or if they have been inactive for a long time) sent by the server, messages are sent by users.&lt;br /&gt;
&lt;br /&gt;
All messages in a room have a unique sequence number (0, 1, ...).  We assume that the server is unaware of sequence numbers (e.g. XMPP MUC); clients must allocate them implicitly when receiving messages.&lt;br /&gt;
&lt;br /&gt;
= VIII. ''(n+1)sec'' Protocol: Step by Step =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;I&amp;lt;/span&amp;gt;n this section we present the ''(n+1)sec'' protocol in algorithmic format. All user IDs should be considered the modulo number of participants in the room.&lt;br /&gt;
&lt;br /&gt;
Deniable authentication is derived from the Triple Diffie-Hellman algorithm presented in [Sys14]. Joining the room is a variation of the two-round mBD+P protocol presented in [ACMP10] where the authentication step has been made deniable. Leaving the room is the one-round mBD+S from [ACMP10]. In both cases, we have added a key confirmation round (round 3) as recommended by [ChMa10] to provide mutual authentication as defined in [GBNM11].&lt;br /&gt;
&lt;br /&gt;
==VIII.1 Schematic view of the key exchange==&lt;br /&gt;
&lt;br /&gt;
The protocol computes a unified session key for all participants. This imposes, in particular, the necessity that all &amp;lt;math&amp;gt;plist_i&amp;lt;/math&amp;gt;' is identical for all participants.However, as consistent view is part of ''(n+1)sec'' security model, it does not impose extra limitation on the protocol. For more information please see [[#Participatory_vs_individually_independent_computation_of_group_keys|Appendix B: Participatory vs individually independent computation of group keys]].&lt;br /&gt;
&lt;br /&gt;
For simplicity, group operation is written multiplicatively (even though it is actually an elliptic curve point operation traditionally represented by addition).&lt;br /&gt;
&lt;br /&gt;
Whenever our design deviates from [ACMP10], it is marked in {{Font color|black|yellow|yellow}}. We have abstracted out the steps mentioned in [ACMP10] as an independent primitive in {{Font color|black|pink|pink}}, however the resulting computation is identical with the one in [ACMP10] protocol:&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 1'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Round&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Step&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate ephemeral DH private key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; x_i \leftarrow [0, order(g)]&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate DH key for BD, Triple DH and Signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;y_i \leftarrow g^{x_i}&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|3&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Broadcast User identity and the DH key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(U_i, y_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|4&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Compute Session Id&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sid_i \leftarrow (U_1|y_1|\dots|U_n|y_n)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-''(n+1)sec''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|5&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate Triple Diffie-Hellman P2P keys&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|yellow|&amp;lt;math&amp;gt;k_{i,j} \leftarrow H({y_j}^{LSK_{U_i}},LPK_{U_j}^{x_i},y_j^{x_i}) \; \forall j \neq i&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|6&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Generate key confirmations&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|yellow|&amp;lt;math&amp;gt;kc_i \leftarrow (H(k_{i,1}, U_1),\dots,H(k_{i,n}, U_n))&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|7&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate secret shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;z'_i \leftarrow (H(k_{i,j}, sid_i) \, \textrm{for} \, j \neq i \, \textrm{and} \, j \in \{1,\dots,n\})&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|8&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Encrypt shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|pink|&amp;lt;math&amp;gt;z_i \leftarrow GroupEnc(k_{i,j} \, \textrm{for} \, j \neq i \, \textrm{and} \, j \in \{1,\dots,n\}, z'_i)&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|9&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Sign identity, shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;\sigma_i \leftarrow Sign_{x_i}(U_i, z_i, sid)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|10&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Broadcast encrypted shares and confirmation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(U_i, z_i, \sigma_i,&amp;lt;/math&amp;gt;{{Font color|black|yellow|&amp;lt;math&amp;gt;kc_i&amp;lt;/math&amp;gt;}}'')''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|3&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|11&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check the validity of key confirmation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|yellow|&amp;lt;math&amp;gt;H(k_{j,i},U_i) \stackrel{?}{=} kc_j[U_i] \; \forall j \neq k&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|12&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check signatures&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;Verify_{y_j}(\sigma_j) \; \forall j \neq i&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|13&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check Session Ids&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sid_j \stackrel{?}{=} sid_i \; \forall j \neq i&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|14&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Generate session key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|pink|&amp;lt;math&amp;gt;sk_{i} \leftarrow H(GroupDec(k_{i,l} \forall l, z_j ) \forall j, sid_i)=H(z'_1, \dots, z'_n, sid_i) &amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|3&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|15&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Broadcast session confirmation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|yellow|&amp;lt;math&amp;gt;(sc_{i} \leftarrow H(sk_i,U_i), sigma_i \leftarrow Sign_{x_i}(sc_{i}))&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|16&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check the validity of session confirmation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|yellow|&amp;lt;math&amp;gt;H(sk_{i},U_j) \stackrel{?}{=} sc_j \; \forall j \neq i&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|17&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check signatures&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|yellow|&amp;lt;math&amp;gt;Verify_{y_j}(\sigma_j) \; \forall j \neq i&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Triple Diffie-Hellman authentication===&lt;br /&gt;
''(n+1)sec'' uses a varient of Triple Diffie-Hellman (TDH) protocol also employed in Textsecure protocol [Mo13] to carry out mutual deniable authentication as well as peer-to-peer secret key exchange. It can be seen as a variation of [SoKi00] key exchange, however, unlike SoKi00], as it does not multiply all three DH secrets and therefore is not suspticble to attacks mentioned in [BoMa10].&lt;br /&gt;
&lt;br /&gt;
By using TDH secret both in p2p key as well as in key confirmation step, (n+1)sec both implicitly and explicitly authenticate the peers.&lt;br /&gt;
&lt;br /&gt;
In Algorithm 1, TDH and the original group key exchange from [ACMP10] has been combined to provide a deniable authenticated group key exchange. Here, we single out TDH Algorithm 1.1 for better presentation of the protocol for the reader. Note, that the users run step 5 differently based on their order in the group. This measure ensures that the P2P key is computed the same between two parties, i.e, &amp;lt;math&amp;gt;k_{i,j} = k_{j,i}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 1.1''' Triple Diffie-Hellman between &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt; assuming i &amp;lt; j&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Round&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Step&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate ephemeral DH private key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; x_i \leftarrow [0, order(g)]&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
|align=&amp;quot;right&amp;quot; | Generate ephemeral DH public key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;y_i \leftarrow g^{x_i}&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|3&lt;br /&gt;
|align=&amp;quot;right&amp;quot; | Broadcast User identity and the DH key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(U_i, y_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|4&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Receive other party id and ephemeral DH public key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(U_j|y_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-''(n+1)sec''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|5&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate Triple Diffie-Hellman P2P keys&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;k_{i,j} \leftarrow H({y_j}^{LSK_{U_i}},LPK_{U_j}^{x_i},y_j^{x_i})&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|6&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Send key confirmation to other party&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;kc_i \leftarrow H(k_{i,j}, U_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| -&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|7&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Receive and Check the validity of key confirmation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;kc_j \stackrel{?}{=} H(k_{j,i}, U_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===''GroupEnc'' and ''GroupDec'' functions===&lt;br /&gt;
For the high level design of the protocol we do not specify the primitives for ''GroupEnc'' and ''GroupDec'' used in steps '''8''' and '''14''' of Alogrithm 1 as a part of the protocol, as we do not specifies the Hash function and the block cipher. We explain their property here. We choose a candidate in section IX.4.&lt;br /&gt;
&lt;br /&gt;
The ''GroupEnc'' and ''GroupDec'' functions are primitives which are called collectively by all instances involved in the session and are supposed to satisfies the following goal:&lt;br /&gt;
&lt;br /&gt;
'''Definition''': Let &amp;lt;math&amp;gt;\mathcal{S} := \{U_1,...,U_n\}&amp;lt;/math&amp;gt; and for each &amp;lt;math&amp;gt;i,j&amp;lt;/math&amp;gt;, let &amp;lt;math&amp;gt;k_{i,j}&amp;lt;/math&amp;gt; be a secret shared between and only between &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;. The goal of group &amp;lt;math&amp;gt;\mathcal{S}&amp;lt;/math&amp;gt; is that:&lt;br /&gt;
&lt;br /&gt;
# Each member of group &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; to generate and share a secret &amp;lt;math&amp;gt;z'_i&amp;lt;/math&amp;gt; among the member of group ''G'' using public channel &amp;lt;math&amp;gt;\mathcal{C}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# &amp;lt;math&amp;gt;z'_i&amp;lt;/math&amp;gt;  remains unknown for any &amp;lt;math&amp;gt;\mathcal{A} \not \in G&amp;lt;/math&amp;gt; eavesdropping the channel &amp;lt;math&amp;gt;\mathcal{C}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To this end each member &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; compute &amp;lt;math&amp;gt;z_i := GroupEnc(k_{i,j} \, \textrm{for} \, j \neq i \, \textrm{and} \, j \in \{1,...,n\}, z'_i)&amp;lt;/math&amp;gt;  and broadcast &amp;lt;math&amp;gt;z_i&amp;lt;/math&amp;gt; on &amp;lt;math&amp;gt;\mathcal{C}&amp;lt;/math&amp;gt;. Later on when &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; receives all &amp;lt;math&amp;gt;z_j&amp;lt;/math&amp;gt;. It recovers all secrets &amp;lt;math&amp;gt;z'_i&amp;lt;/math&amp;gt; by computing &amp;lt;math&amp;gt;GroupDec(k_{i,j} \, \textrm{for} \, j \neq i \, \textrm{and} \, j \in \{1,...,n\}, z_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===(n+1)sec key exchange vs original Flexible Group Key Exchange of [ACMP10]===&lt;br /&gt;
Although in higher level view of (n+1)sec we generalized the process of key exchange using ''GroupEnc''/''GroupDec'' abstraction, at lower level our choice of primitive for this functions make the group key computation processes of ''(n+1)sec'' and the original key exchange algorithm the same. Hence, the steps marked pink in Algorithm 1, only differ in from [ACMP10] but not in result.&lt;br /&gt;
&lt;br /&gt;
(n+1)run a deniable mutual authentication protocol along side with the key exchange protocol, this results in communicating extra key confirmation data along side of other data exchanged during the course of running the protocol. As we will show in the proof, these data has effect on the usual run of the algorithm.&lt;br /&gt;
&lt;br /&gt;
The only step that ''(n+1)sec'' runs differently compare to the original algorithm (beside generating extra data), is computation of mutual secret, between &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;. In original, algorithm it is simply &amp;lt;math&amp;gt;g^{x_i}{x_j}&amp;lt;/math&amp;gt;. In ''(n+1)sec'', it is the triple DH secret &amp;lt;math&amp;gt;H({y_j}^{LSK_{U_i}},LPK_{U_j}^{x_i},y_j^{x_i})&amp;lt;/math&amp;gt;. We will prove that this change does not compromise any of the protocol proprieties.&lt;br /&gt;
&lt;br /&gt;
The main difference between the two key exchange algorithms is in the key used for signature. In original algorithm, parties use their long term private key to sign their contribution, while in ''(n+1)sec'' they use their ephemeral keys. However, because the ephemeral keys has been authenticated before used for verification, we prove that the authenticity of signatures in both algorithms are equivalent under CDH assumption.&lt;br /&gt;
&lt;br /&gt;
==VIII.2 Chatroom Setup==&lt;br /&gt;
&lt;br /&gt;
In almost any practical case, participants join the chat sequentially. It is assumed that multiple participants cannot join simultaneously. For the sake of efficiency one can adjust the implementation to have a threshold time to wait and thus start a chat with more participants. However, this makes the implementation significantly more complicated without any evident efficiency benefit.&lt;br /&gt;
&lt;br /&gt;
Therefore, our assumption is that a secure chat is always set up when a participant starts the chat room. Additional participants would be added sequentially using Algorithm [[#VIII.3_Joining|VIII.3]], as they enter the chat. Algorithm [[#Chatroom_setup|1]] describes the chat room setup protocol.&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 2'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate ephemeral DH private key of the room initiator&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; x_i \leftarrow [0, order(g)]&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate DH key for BD, Triple DH and Signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;y_i \leftarrow g^{x_i}&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Set participant list&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;plist \leftarrow [U_i]&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VIII.3 Join ===&lt;br /&gt;
&lt;br /&gt;
Joining a chat involves two different procedures: the Join procedure, described in Algorithm [[''(n+1)sec''#Join|2]], which runs on the new participant’s instance, and an Accept New Participant Procedure, described in Algorithm [[''(n+1)sec''#Protocol_for_other_participants_already_in_the_chat_to_accept_the_newcomer|3]], which runs on the clients of participants that are already in the chat.&lt;br /&gt;
&lt;br /&gt;
When a new participant &amp;lt;math&amp;gt;U_{n+1}&amp;lt;/math&amp;gt; joins the chat, current participants can still use their established authenticated ephemeral public key (to derive the &amp;lt;math&amp;gt;sessionKey_{new}&amp;lt;/math&amp;gt; and as their signature verification key). Confidentiality of &amp;lt;math&amp;gt;sessionKey_{old}&amp;lt;/math&amp;gt; is guarded against the new participant by Diffie-Hellman key shares hashed alongside the session id (which is dependent on the list of participants). The new participant cannot combine the old and new shares to recover &amp;lt;math&amp;gt;sessionKey_{old}&amp;lt;/math&amp;gt;. The fact that old participants do not need to compute new ephemeral keys (and re-verify their ephemeral identities) decreases the computational complexity of the protocol.&lt;br /&gt;
&lt;br /&gt;
The new participant needs to authenticate everybody already in the room and hand them their ephemeral key. All the parties already in the room only need to authenticate the new participant and need to send to them their ephemeral DH key. These procedures are described in Algorithm 3 and 4. After initial authentication step, all parties follow the same procedure to initiate a new session following Algorithm 5.&lt;br /&gt;
&lt;br /&gt;
====  Authentication Step for new Joining party====&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 3'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate ephemeral DH private key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; x_i \leftarrow [0, order(g)]&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate DH key for BD, Triple DH and Signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;y_i \leftarrow g^{x_i}&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Broadcast User identity and the DH key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(U_i, y_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Receive other users' id/key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;plist_i|klist_i \leftarrow (U_1|y_1|\dots|U_n|y_n)\cup(U_i,y_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate Triple Diffie-Hellman P2P keys&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;k_{i,j} \leftarrow H({y_j}^{LSK_{U_i}},LPK{U_j}^{x_i},y_j^{x_i})&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate key confirmations&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;kc_i \leftarrow ((U_1,H(k_{i,1}, U_1)),\dots,(U_n,H(k_{i,n}, U_n)))&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After this step joining user will proceed to &amp;quot;initiate new session&amp;quot; by Algorithm 5.&lt;br /&gt;
&lt;br /&gt;
====Authentication Step for parties in the room====&lt;br /&gt;
For other participants to a accept a new participant only, the authentication step is different. After current participants authenticate the new user, they proceed to update session.&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 4'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| broadcast all user's identities &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; (U_1|y_1|\dots|U_n|y_n) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Receive other users' id/key and update participant list&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(plist_i|klist_i) \cup (U_j|y_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate Triple Diffie-Hellman P2P key for the new participant&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;k_{i,j} \leftarrow H({y_j}^{LSK_{U_i}},LP_{U_j}^{x_i},y_j^{x_i})&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate key confirmations&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;kc_{i,j}\leftarrow (U_i,H(k_{i,j}, U_i)) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After this step users will proceed to &amp;quot;initiate new session&amp;quot; using Algorithm 5.&lt;br /&gt;
&lt;br /&gt;
==== Initiate new session ====&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 5'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Compute Session Id&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sid_i \leftarrow H(U_1|y_1|\dots|U_n|y_n)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Cancel any pending request for establishing a session with the same Id&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|AxeNewSessionRequestTimer&amp;lt;math&amp;gt;(sid_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate secret shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;z'_i \leftarrow (H(k_{i,j}, sid_i) \, \textrm{for} \, j \neq i \, \textrm{and} \, j \in \{1,\dots,n\})&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Encrypt shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;z_i \leftarrow GroupEnc(k_{i,j} \, \textrm{for} \, j \neq i \, \textrm{and} \, j \in \{1,\dots,n\}, z')&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Sign identity, shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;\sigma_i \leftarrow Sign_{x_i}(U_i, z_i, sid)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Broadcast key shares and confirmation (if any)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(U_i, z_i, \sigma_i, kc_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Receive other user(s)' key shares and confirmation of unauthenticated users or Time out&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Wait to Receive (&amp;lt;math&amp;gt;U_j|z_j,\sigma_1,kc_{ji}) &amp;lt;/math&amp;gt; for  &amp;lt;math&amp;gt; U_j&amp;lt;/math&amp;gt; unauthenticated or Timeout by(2&amp;lt;math&amp;gt;\times&amp;lt;/math&amp;gt;BROADCAST_LATENCY+INTERACTION_GRACE_INTERVAL, Drop inactive users, queue a new session request)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check the validity of key confirmation of unauthenticated users&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;kc_j[U_i] \stackrel{?}{=} H(k_{i,j}, U_i)&amp;lt;/math&amp;gt;  for unauthenticated &amp;lt;math&amp;gt; U_j&amp;lt;/math&amp;gt; &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check signatures&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;Verify_{y_i}(\sigma_j)&amp;lt;/math&amp;gt; for  ''j'' in {1,...,''n''}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check Session Ids&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sid_j \stackrel{?}{=} sid_i \; \forall j \neq i&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Generate session key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sk_{i} \leftarrow H(GroupDec(k_{i,l} \forall l, z_j ) \forall j, sid_i)=H(z'_1, \dots, z'_n, sid_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Broadcast session confirmation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|yellow|&amp;lt;math&amp;gt;(sc_{i} \leftarrow H(sk_i,U_i), sigma_i \leftarrow Sign_{x_i}(sc_{i}))&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check the validity of session confirmation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|yellow|&amp;lt;math&amp;gt;H(sk_{i},U_j) \stackrel{?}{=} sc_j \; \forall j \neq i&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check signatures&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|yellow|&amp;lt;math&amp;gt;Verify_{y_j}(\sigma_j) \; \forall j \neq i&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Initiate the TranscriptChain&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;TrascriptChain^S_i[0] \leftarrow (sk^S_i, sid_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Initiate the last_sender_seq_num array&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;last\_sender\_seq\_num \leftarrow (0,...,0)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Initiate the own_seq_num to 0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;own\_seq\_num \leftarrow 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Sending and receiving messages while joining is in progress ====&lt;br /&gt;
&lt;br /&gt;
In situations where a prolonged joining process (due to connection problems or malicious activities) has an adverse effect on the user experience, it might be desirable to enable that joining users can communicate with the parties in the room, while maintaining minimum assurances of authenticity, confidentiality, forward secrecy, as well as consistency only among participants.&lt;br /&gt;
&lt;br /&gt;
Consistency aspects of ''(n+1)sec'', both for the room view (''plist'') and for the transcript, are reached through group agreement. However, there are times when group agreement may be hard or impossible to reach either due to latency in a single participant's connection or due to a single participant broadcasting incorrect confirmation data (such as wrong ''plist'', ''sid'', key share, etc).&lt;br /&gt;
&lt;br /&gt;
We offer an extension to the ''(n+1)sec'' protocol to tackle this problem during the joining process. When a new participant joins the room, they send their DH key shares to the other participants. The other participants send their ephemeral key in return. They then send their key confirmation and key share. If this extension is to be considered, as soon as each user receives a key confirmation from another user, who is not currently part of the session, ''(n+1)sec'' displays a message highlighting the fact that although the user is not part of the session part of the conversation (from users' who confirmed the new user's identity) is being shared with them (through P2P encryption using the key derived from DH Key). The protocol, however, does not honour their input in the consistency check until a new session including the new user is set up. Each client can decide whether to disable this option.&lt;br /&gt;
&lt;br /&gt;
The user remains in the list of those not part of the current session, but receives the session messages until a new session is set up. Similarly, when a user receives a message from a user who is not part of the session, ''(n+1)sec'' will decrypt the message and display it with a disclaimer that the user is not yet part of the session and that some participants may not receive the same message.&lt;br /&gt;
&lt;br /&gt;
This is less secure model in which a room is a forwardly secure authenticated communication channel while a session is a subset of the room, which additionally offers a consistent view of the room and consistent messages among participants. The detail of the process is depicted in Secthoin VIII.5&lt;br /&gt;
&lt;br /&gt;
===VIII.4 Leave===&lt;br /&gt;
Leaving a chatroom involves a message from a leaving party indicating its intention to leave which, as with all other messages, contains the hash of TranscriptChain and one procedure for those who are staying in the chatroom (Procedure Farewell) which is described in Table [[''(n+1)sec''#Leave]]. &lt;br /&gt;
&lt;br /&gt;
====Farewell====&lt;br /&gt;
&lt;br /&gt;
Run by exiting user.&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 6'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Send farewell message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Send(&amp;quot;Leaving!&amp;quot;)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Wait to receive hashes of TranscriptChain or Timeout&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Wait to Receive() or Timeout by((2 &amp;lt;math&amp;gt;\times&amp;lt;/math&amp;gt;BROADCAST_LATENCY)+INTERACTION_GRACE_INTERVAL)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Shrink====&lt;br /&gt;
&lt;br /&gt;
When the remaining participants receive the farewell message they need to reply with the Hash of TranscriptChain of the last message seen by the leaving user. They also need to re-run the one round key update algorithm. However, they only need a notice from the server that the user is leaving to initiate a subsession excluding the leaving user. &lt;br /&gt;
&lt;br /&gt;
Additionally, failure to receive a heartbeat from a user will result in executing Algorithm [[''(n+1)sec''#Shrink]] excluding users who did not update their key.&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 7'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Send Hash of TranscriptChain of last message seen by leaving user&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Send(&amp;lt;math&amp;gt;H(TranscriptChain^S_i[Parent(m_{farewell})])&amp;lt;/math&amp;gt;)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Remove leaving user's id/key and update participant list&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(plist_i|klist_i) \backslash (U_j|y_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Users will proceed to &amp;quot;initiate new session&amp;quot; steps.&lt;br /&gt;
&lt;br /&gt;
=== VIII.5 Secure Send and Receive ===&lt;br /&gt;
&lt;br /&gt;
After the session key is established, participants will use Algorithms [[''(n+1)sec''#Send|5]] and [[''(n+1)sec''#Receive|6]] to communicate securely.&lt;br /&gt;
&lt;br /&gt;
On Send, the protocol checks the status of the new ephemeral Diffie-Hellman and key share using messages it receives from participants. It (re)sends any missing pieces. It also informs other participants which part of the key share has been received by the participant. This information is needed in order to enforce in-session forward secrecy. The metadata flag indicates if the message being sent only contains meta data (e.g. heartbeat) or actual user communication.&lt;br /&gt;
&lt;br /&gt;
On Receive, the protocol updates who has seen which pieces of the key shares. The protocol also generates a new group key if the new key shares have been received from all participants. Those who have not updated their key shares eventually time out via their heartbeat interval.&lt;br /&gt;
&lt;br /&gt;
====Send====&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 8'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; | prepend session id and sender id&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (sid, U_i, m) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Generate new DH Key or new secret share if needed and append&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (m,s) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Increment own sequence number&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; own\_seq\_num \leftarrow own\_seq\_num+1 &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Append the hash of the TranscriptChain, up to the parent of the message being sent&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow &amp;lt;/math&amp;gt; (''m'', &amp;lt;math&amp;gt;H(H(parent(m)), H(TransciptChain^S_i[parent(m)-1]))&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;parent\_id(m)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;own\_seq\_num&amp;lt;/math&amp;gt;)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Generate a random  nonce and append to the message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (m, rand(128bit)) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Sign the message and append the signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (m, Sign_{x_i}(m))&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Encrypt&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;e \leftarrow Enc_{k_{sid}}(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Broadcast the message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(sid_i, e)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Reset Heartbeat timeout timer&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|ResetHeartbeatTimer()&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Set ACK timeout timer if the message has user content&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;meta\_only \stackrel{?}=&amp;lt;/math&amp;gt; False then ResetHeartbeatTimer()&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Receive====&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 9'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Decrypt message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; sid_{rec}, sender\_id, m, s, h, parent\_id, sender\_seq\_num, sigma  \leftarrow Dec_k(m) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Check signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; Verify_{sender\_id}(m,\sigma) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Compute message sequence number&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; seqnum(m) \leftarrow &amp;lt;/math&amp;gt; ComputeSeqNum(''m'')&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Verify session id and transcript consistency and sender sequence number, issue a warning in case of failure&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; sid_i \stackrel{?}{=} sid_{rec} \; &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt; \; h \stackrel{?}{=} H(H(parent(m)), H(TranscriptChain^S_i[parent(m)-1])) &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt; sender\_seq\_num \stackrel{?}{&amp;gt;} last\_own\_seq\_nums[sender\_id] &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Update TranscriptChain if possible&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; TranscriptChain^S_i[seqnum(m)] = (H(m), H(TranscriptChain^S_i[seqnum(m)-1])) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Update sender sequence number record&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;last\_own\_seq\_nums[sender\_id] \leftarrow sender\_seq\_num &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Update sender's ephemeral key or share secret&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;y_j \leftarrow s \; \textrm {  or  } \; z_{j} \leftarrow s&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| If all users' share are received, generate session key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sk_{i} \leftarrow H(GroupDec(k_{i,j}, z_j \; \forall j),sid_i, U_j) \; \forall j \neq i&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Update ack timeout timer&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|AxeAckTimeoutTimer&amp;lt;math&amp;gt;(parent(m),sender_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Update rekey timeout timer&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| ResetRekeyTimeOut(&amp;lt;math&amp;gt;sender_i&amp;lt;/math&amp;gt;)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| If the message has content set up ACK timer&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;meta\_only \stackrel{?}= True&amp;lt;/math&amp;gt; then &amp;lt;math&amp;gt;SetACKTimer(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| return m&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If &amp;lt;math&amp;gt;meta\_only \stackrel{?}{=} False&amp;lt;/math&amp;gt; then return ''m''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Out of Session Send and Receive ====&lt;br /&gt;
Due to nature of the key exchange algorithm, (n+1)sec support confidential P2P communication. This in particular enables the user to share the conversation with joining user(s) who confirmed their identity to the user but have not established a session yet. It is worth mentioning that every session keeps a ''list future sessions to transition to'' this is equivalent to the list of ''confirmed but yet to join users''. If the extension discussed in section VIII.3 is enabled it will make use of this list to implement  the following changes:&lt;br /&gt;
* When a user send a message ''Extended Send'' is invoked instead, it sends the message to the session using ''Send'' but also to the prospective participants, using ''P2P Send''.&lt;br /&gt;
* When a message is received, ''Extended Receive'' is called which check if the user has the correct key to decrypt the message. If the message is encrypted by session key and user has the session key then it calls the normal receive. If the message is encrypted by a p2p key that the user share, it calls ''P2P Receive''. Otherwise, it simply ignores the message.&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 9.1 Extended Send'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; | If we are part of a session id in the room call ''Send''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| Send&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| For all confirmed users not in session call ''P2P Send''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| P2P Send&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 9.2 Extended Receive'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; | If ''m'' has session id call ''Receive''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| if ''m'' has ''sid'' then Receive&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| If ''m'' has key id, call ''P2P Receive''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| P2P Send&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 9.3 P2P Send'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; | Prepend key id and sender id&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (key\_id, U_i, m) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Generate a random  nonce and append to the message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (m, rand(128bit)) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Sign the message and append the signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (m, Sign_{x_i}(m))&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Encrypt&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;e \leftarrow Enc_{k_{key\_id}}(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Broadcast the message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(key\_id, e)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 9.4 P2P Receive'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Decrypt message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; key_{id}, sender\_id, m, sigma \leftarrow Dec_{k_{key\_id}}(m) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Check signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; Verify_{sender\_id}(m,\sigma) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| return m&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|return ''m''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===VIII.6 Reaching Consistency ===&lt;br /&gt;
&lt;br /&gt;
The protocol provisions two procedures to reach consistency in different cases: (a) reaching consistency for arbitrary messages during the course of a conversation, and (b) reaching consistency when an instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; leaves. Case (b) may be viewed as a special instance of case (a) plus the additional premise that  &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; must reach consistency as soon as possible (because they want to leave), and that they don't care about reaching consistency for any subsequent messages that they might receive after their final &amp;quot;farewell&amp;quot; message.&lt;br /&gt;
&lt;br /&gt;
Reaching consistency for arbitrary messages during the course of a conversation:&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 10'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Receive ''m'' with parent ''p'' from &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow seqnum(M), p \leftarrow parentnum(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Compare hash of TranscriptChain_j[p] with own value of it, issue a warning if it fails.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;H(TranscriptChain^S_j[p]) \stackrel{?}{=} H(TranscriptChain^S_i[p])&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Compute TranscriptChain^S_i[m] &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;plist \leftarrow [U_i]&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Case '''(b)''': when an instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; wants to part, they send a &amp;quot;farewell&amp;quot; message ''m'' which contains &amp;lt;math&amp;gt;Hash(TranscriptChain^S_i[p])&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Everyone should include &amp;lt;math&amp;gt;Hash(TranscriptChain_j[p])&amp;lt;/math&amp;gt; in their re-key message&lt;br /&gt;
* When ''&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;'' reaches mutual consistency for p may leave or otherwise (if received hashes and their owns are non-matching)  shows a warning.&lt;br /&gt;
** &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; won't have a chance to reach consistency for the messages receives after ''p''&lt;br /&gt;
&lt;br /&gt;
===VIII.7 In-session Forward Secrecy===&lt;br /&gt;
To ensure forward secrecy in long living chat sessions, ''(n+1)sec'' provides a session key update throughout the session. Each message sent to the session by each participant contains meta data described in [[#VIII.5.1 (n+1)sec Message Structure]]. Prior to sending any message, ''(n+1)sec'' determines the content of meta data, and piggy backs to that message according to the following algorithm:&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 10.1 Compute meta data'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Initiate meta data with current state of knowledge of new ephemeral keys and secret shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; meta\_data \leftarrow ustate_i[j]&amp;lt;/math&amp;gt; for all  ''j'' in {1,...''n}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Include the new ephemeral key if participant &amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt; has not receive it&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If &amp;lt;math&amp;gt;ustate_i[j] \stackrel{?}{=} 0&amp;lt;/math&amp;gt; ''meta_data'' \leftarrow &amp;lt;math&amp;gt;y_{i_{new}}&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| If (all) participants have sent their ephemeral keys compute the shared secret&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If &amp;lt;math&amp;gt;ustate_{j}[i] \stackrel{?}{=} 1&amp;lt;/math&amp;gt; for all  ''j''&lt;br /&gt;
in {1,...''n}, then &amp;lt;math&amp;gt; meta\_data \leftarrow (meta\_data, GroupEnc(k_{i_j} \, \textrm{for} \, j \neq i \, \textrm{and} \, j \in \{1,\dots,n\}, z'))&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Return meta data&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|return ''meta_data''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===VIII.8 Heartbeat and Timeout ===&lt;br /&gt;
&lt;br /&gt;
Heartbeat is an empty message which contains only meta data. The meta data consists of information used to compute a new key and the most updated hash of transcript chain.&lt;br /&gt;
&lt;br /&gt;
The protocol sends a heart beat only if the user has not sent any messages for a specific period of time.&lt;br /&gt;
&lt;br /&gt;
The heartbeat is necessary to ensure three properties:&lt;br /&gt;
&lt;br /&gt;
- Periodic transcript consistency check.&lt;br /&gt;
- In session forward secrecy.&lt;br /&gt;
- Freshness&lt;br /&gt;
&lt;br /&gt;
To achieve these goals three time out periods are defined when heart beat sending is required. Additionally, we define an interval to model the latency in the underlying transport. These should be defined to cover common cases (e.g. 95th-percentile):&lt;br /&gt;
&lt;br /&gt;
* ACK_GRACE_INTERVAL: When &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; a receives a non-empty message it needs to inform the group about the transcript update no later than ACK_GRACE_INTERVAL time. Therefore if &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; f &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; does not send a message ACK_GRACE_INTERVAL seconds after receiving a non empty message,&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; will send a heartbeat.&lt;br /&gt;
&lt;br /&gt;
* REKEY_GRACE_INTERVAL, to ensure in session forward secrecy, the protocol requires that each &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; updates their DH ephemeral key as well as group key. After a session is established or it was rekeyed, each &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; needs to send its new DH ephemeral key no later than REKEY_GRACE_INTERVAL. Therefore if &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; has not sent any message by that&lt;br /&gt;
period of time, it issues an empty message. Similarly after receiving all ephemeral keys from all participants, &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; needs to send its secret for computation of new key no later than REKEY_GRACE_INTERVAL.&lt;br /&gt;
&lt;br /&gt;
* INTERACTION_GRACE_INTERVAL, to ensure establishment of a session in timely manner, when immediate contribution of participants is required (for example sending key confirmation, contribution to the session secret), this values indicate that how long an active participants should wait till it decide to drop the non-contributing inactive participants from the participant list.&lt;br /&gt;
&lt;br /&gt;
* BROADCAST_LATENCY: Modelling the amount of time which a message takes to reach the server and broadcast to the other clients. It should be based on the transport considered.&lt;br /&gt;
&lt;br /&gt;
==== Failure to heartbeat and inactivity timers ====&lt;br /&gt;
&lt;br /&gt;
Whenever, a message ''m'' is received a timer of (2*BROADCAST_LATENCY)+ACK_GRACE_INTERVAL) period is set. If the &amp;lt;math&amp;gt;H(Transcript_j[m'])&amp;lt;/math&amp;gt; for a &amp;lt;math&amp;gt;m' \ge m&amp;lt;/math&amp;gt; is received from all participants, the timer is cancelled. Otherwise at the time out, the protocol issues a local UI warning and cancel the warning if/when such a hash is received and is consistence among participants.&lt;br /&gt;
&lt;br /&gt;
When a new session key is computed as well as when &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; receives new ephemeral DH values from all users, a timer of (2*BROADCAST_LATENCY)+REKEY_GRACE_INTERVAL period is set. It is cancelled when all user contributions are received (ephemeral keys or session key secrets). Otherwise, the &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; excludes users who failed to contribute from the &amp;lt;math&amp;gt;plist&amp;lt;/math&amp;gt; exclude those users from the plist and call '''initiate new session'''. This measure is taken to ensure that users do not block in-session forward secrecy due to loss of connection or being under attack.&lt;br /&gt;
&lt;br /&gt;
==== Timing out during an interactive session ====&lt;br /&gt;
&lt;br /&gt;
''(n+1)sec'' by design assumes the participants are trusted in being commited to the goal fo creating a secure chatroom. In this sense, ''(n+1)sec'' provide little defens against party which trying to sabotage a room by mounting various denial of service approaches. However, there are situation where a party is genuinely affected (by external adversary) or by connection problem. Under such assumption, situations we expect that all other parties, reach a consensus, that a participant has connectivity problem and agree on leave them out of the room.&lt;br /&gt;
&lt;br /&gt;
Timeout sub protocol is designed to deal with such a situation. When a new session is requested (for join, leave, etc) each participant wait for (2*BROADCAST_LATENCY)+INTERACTION_GRACE_INTERVAL, they omit non-participating participants from the plist, and wait for PLIST_UPDATE_GRACE_INTERVAL.  so other participants also reach to the same conclusion and updates their plists, then they initiate a new session.&lt;br /&gt;
&lt;br /&gt;
==== Drop inactive users, queue a new session request ====&lt;br /&gt;
'''Algorithm 10.XX'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Drop inactive users&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; plist_i \leftarrow plist_i \backslash inactive\_participant\_list&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Recompute Session Id&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sid_i \leftarrow H(U_1|y_1|\dots|U_{n_{active}}|y_{n_{active}})&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Set up timer to request a new session&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|SetTimer(PLIST_UPDATE_GRACE_INTERVAL, initiate new session)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When a participant receives a request for initiating new session, it checks their most current view of participant list (the one with eliminated timed out users) and if it matched then they go ahead with initiating the session, otherwise decline halt the request.&lt;br /&gt;
&lt;br /&gt;
====VIII.9 (n+1)sec Message Dictionary====&lt;br /&gt;
&lt;br /&gt;
All (n+1)sec messages have the following format&lt;br /&gt;
&lt;br /&gt;
    :o3np1sec:Base64EnocodedMessage&lt;br /&gt;
&lt;br /&gt;
The Base64EncodedMessage is decoded to sub data fields. There is no delimiter, the fields can be split based on the data size. We use commas (',') only for the purposes of readability in this document. The data types are described as follows.&lt;br /&gt;
&lt;br /&gt;
Bytes (DTByte):&lt;br /&gt;
    1 byte unsigned value&lt;br /&gt;
Shorts (DTSHort):&lt;br /&gt;
    2 byte unsigned value, big-endian&lt;br /&gt;
Length (DTLength):&lt;br /&gt;
    4 byte unsigned value, big-endian&lt;br /&gt;
HashBlock (DTHash):&lt;br /&gt;
    32 byte data&lt;br /&gt;
Opaque variable-length data (DTOpaque):&lt;br /&gt;
    4 byte unsigned len, big-endian&lt;br /&gt;
    len byte data&lt;br /&gt;
&lt;br /&gt;
All messages have mandatory version and message type fields:&lt;br /&gt;
&lt;br /&gt;
version (DTShort), message type (DTShort),  type-specific part&lt;br /&gt;
&lt;br /&gt;
&amp;quot;version&amp;quot; is equal to 0001.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;message type&amp;quot; is chosen from the following list:&lt;br /&gt;
    UNKNOWN                     =0x00, //Invalid&lt;br /&gt;
    JOIN_REQUEST                =0x0a, //Session establishement&lt;br /&gt;
    PARTICIPANTS_INFO           =0x0b,&lt;br /&gt;
    JOINER_AUTH                 =0x0c,&lt;br /&gt;
    GROUP_SHARE                 =0x0d,&lt;br /&gt;
    SESSION_CONFIRMATION        =0x0e, //In session messages&lt;br /&gt;
    IN_SESSION_MESSAGE          =0x10,&lt;br /&gt;
    P2P_MESSAGE                 =0x20,&lt;br /&gt;
&lt;br /&gt;
many messages use &amp;quot;participant id&amp;quot; which is defined as follows:&lt;br /&gt;
&lt;br /&gt;
    participant nickname, participant fingerprint (DTHash)&lt;br /&gt;
&lt;br /&gt;
participant nickname is a string. Its size can be determined by the length of the participant id - 32. The participant finger print is a 32bit representation of an ed25519 public key.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;participant info&amp;quot; is defined as&lt;br /&gt;
&lt;br /&gt;
    participant id, ephemeral public key (DTHash), authenticated (DTByte)&lt;br /&gt;
&lt;br /&gt;
From the point of view of the sender of the message the participant is authenticated if &amp;quot;authenticated&amp;quot; is 1. Unauthenticated if it is 0.&lt;br /&gt;
&lt;br /&gt;
The following sections will describe the type-specific part for each type of messagee information about the joiner.&lt;br /&gt;
&lt;br /&gt;
=====Join Request=====&lt;br /&gt;
&lt;br /&gt;
    participant id, ephemeral publick key (DTHash)&lt;br /&gt;
&lt;br /&gt;
representing the joiner's information. &lt;br /&gt;
    &lt;br /&gt;
=====Participant Info=====&lt;br /&gt;
&lt;br /&gt;
    session id (DTHash), session view (DTOpaque), key_confirmation(DTOpaque), sender's share(DTHash)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;session view&amp;quot; consists of&lt;br /&gt;
&lt;br /&gt;
    participant0_info (DTOpeque), participant1_info (DTOpeque), ..., partcipantn_info(DTOpeque)&lt;br /&gt;
&lt;br /&gt;
where &amp;quot;participant0,...,participantn&amp;quot; are all participants in the session (represented by session id).&lt;br /&gt;
&lt;br /&gt;
&amp;quot;key confirmation&amp;quot; consists of a hash of a triple dh token between the sender and the joining participant and the &amp;quot;participant id&amp;quot; of the joining user.&lt;br /&gt;
&lt;br /&gt;
the sender's share is computed as described in the algorithm.&lt;br /&gt;
&lt;br /&gt;
=====Joiner Auth=====&lt;br /&gt;
&lt;br /&gt;
    session id (DTHash), key_confirmation (DTOpeque), signature&lt;br /&gt;
&lt;br /&gt;
&amp;quot;key confirmation&amp;quot; consists of a hash of a triple dh token between the sender and the joining participant and the &amp;quot;participant id&amp;quot; of the joining user.&lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
=====Group Share=====&lt;br /&gt;
&lt;br /&gt;
    session id (DTHash), sender share (DTHash), signature (DTHash)&lt;br /&gt;
      &lt;br /&gt;
=====Session Confirmation=====&lt;br /&gt;
&lt;br /&gt;
    session id (DTHash), session confirmation (DTHash), next session ephemeral key (DTHash)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;session confirmation&amp;quot; is a hash(Session key|sender nickname), the next session ephemeral key is the 32bit public key that the user is going to use in the next session.&lt;br /&gt;
 &lt;br /&gt;
=====(n+1)sec in session Message Structure=====&lt;br /&gt;
&lt;br /&gt;
Every (n+1)sec message sent after establishment of a session has the following format:&lt;br /&gt;
&lt;br /&gt;
    :o3np1sec:Base64EnocodedMessage&lt;br /&gt;
&lt;br /&gt;
The message has the following structure.&lt;br /&gt;
&lt;br /&gt;
     sid (DTHash), Encrypted part of the message, Signature (DTHashx2)&lt;br /&gt;
&lt;br /&gt;
Encrypted message can be decrypted by the session key&lt;br /&gt;
&lt;br /&gt;
    sender_index (DTLength), own_sender_id (DTLength), parent_id (DTLength), hash of TranscriptChain of the message (DTHash), nonce (DTHash), message load&lt;br /&gt;
&lt;br /&gt;
&amp;quot;session ID&amp;quot; and the &amp;quot;sender_index&amp;quot; are prepended in part to address concerns of [Da01].&lt;br /&gt;
&lt;br /&gt;
&amp;quot;own_sender_id&amp;quot; is the sequential id assigned to each message by its sender, used for transcript consistency check.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;parent_id&amp;quot; is the global sequential id of the last message seen by the sender before sending the message.&lt;br /&gt;
&lt;br /&gt;
The message also includes the &amp;quot;hash of TranscriptChain&amp;quot; of the parent of the message as &amp;quot;additional authenticated data&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(TransciptChain[parent(m)])&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we send the entry in the chain indexed by &amp;lt;math&amp;gt;parent(m)&amp;lt;/math&amp;gt; rather than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. This is because a hash may only be calculated once the subject is actually received back from the server (i.e. gets a sequence number). This differs from some other concepts of &amp;quot;message ID&amp;quot; that may be calculated locally.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;nonce&amp;quot; is a random 128 bit value, appended to prevent any possibility of replay or brute force attack.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;message load&amp;quot; is a multi-field message and has the following structure:&lt;br /&gt;
    sub_message_type(DTShort)&lt;br /&gt;
    sub_message(DTOpeque) [Optional]&lt;br /&gt;
&lt;br /&gt;
current sub message types are:&lt;br /&gt;
    USER_MESSAGE: 0001&lt;br /&gt;
    follewed by the plain text typed by user and handled to (n+1)sec by the chat client(DTOpaque)&lt;br /&gt;
    LEAVE_MESSAGE 0002&lt;br /&gt;
    followed by nothing.&lt;br /&gt;
&lt;br /&gt;
    If there is no message load, then the message is just an ack, acknowledging receipt of other messages.&lt;br /&gt;
&lt;br /&gt;
====(n+1)sec P2P Message Structure====&lt;br /&gt;
&lt;br /&gt;
Every p2p (n+1)sec message sent after exchange of the ephemeral public keys has the following format.&lt;br /&gt;
&lt;br /&gt;
    :o3np1sec:Base64EnocodedMessage&lt;br /&gt;
&lt;br /&gt;
The Base64EncodedMessage is decoded as:&lt;br /&gt;
&lt;br /&gt;
    version (DTShort), sid (DTHash), Encrypted part of the message, Signature (DTHashx2)&lt;br /&gt;
    keyid, Encrypted part of the message, Signature&lt;br /&gt;
&lt;br /&gt;
Encrypted message can be decrypted by the p2p key and has the following structure&lt;br /&gt;
&lt;br /&gt;
Signed Message consists of following parts&lt;br /&gt;
&lt;br /&gt;
    keyid, sender id, received id, nonce, User message, &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Key ID&amp;quot; and the &amp;quot;sender ID&amp;quot; are prepended in part to address concerns of [Da02]. The nonce is a random 128 bit value, appended to prevent any possibility of replay or brute force attack.&lt;br /&gt;
&lt;br /&gt;
User message is the plain text typed by user and handled to (n+1)sec by the chat client.&lt;br /&gt;
&lt;br /&gt;
====VIII.10 (n+1)sec Message Handling====&lt;br /&gt;
&lt;br /&gt;
This section explains the rule - based on which - (n+1)sec governs the order when multiple participants try to join or leave a session simultaneously. Every participant in a chat room has either the status of a &amp;quot;joiner&amp;quot; or a &amp;quot;participant&amp;quot; of a confirmed session exclusively. Based on the user status and the message received, a specific subprotocol needs to be run by the user which is explained in the following sections.&lt;br /&gt;
&lt;br /&gt;
If the message has a session id of a session that the user is part of, then message handling is governed by the finite state machine table described below. Otherwise, the messages should be handled as follows:&lt;br /&gt;
&lt;br /&gt;
=====Joiner====&lt;br /&gt;
&lt;br /&gt;
The Joiner will ignores all messages without session id.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If the message has a session id - of wich the joiner is not a party - the joiner will react as follows:&lt;br /&gt;
&lt;br /&gt;
   * ''Participant Info'': the joiner begins a session by appending itself to the list.&lt;br /&gt;
   * ''Session Confirmation'': re-try to join.&lt;br /&gt;
&lt;br /&gt;
=====Confirmed Participant======&lt;br /&gt;
&lt;br /&gt;
If the received message does not have a session id, then it is a JOIN_REQUEST and can be handled by the current session's finite state machine.&lt;br /&gt;
&lt;br /&gt;
If the received message has a session id, but the confirmed participant is not part of the session then the participant will ignore the message. (The participant is - in this case - leaving the session).&lt;br /&gt;
&lt;br /&gt;
=====Finite State Table=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! State/Message !! JOIN_REQUEST !! PARTICIPANTS_INFO !! !! JOINER_AUTH !! GROUP_SHARE !! SESSION_CONFIRMATION !! IN_SESSION_MESSAGE !!&lt;br /&gt;
|-&lt;br /&gt;
| JOIN_REQUESTED || || auth_and_reshare || || || confirm_or_resession || ||&lt;br /&gt;
|-&lt;br /&gt;
| RE_SHARED ||  || confirm_auth_add_update_share_repo || confirm_auth_add_update_share_repo ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
| GROUP_KEY_GENERATED || || || || || confirm_auth_add_update_share_repo || ||&lt;br /&gt;
|-&lt;br /&gt;
| IN_SESSION || init_a_session_with_new_user || || || || mark_confirmed_and_may_move_session || receive ||&lt;br /&gt;
|-&lt;br /&gt;
| DEAD ||  || || || || mark_confirmed_and_may_move_session || receive ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Session transmission=====&lt;br /&gt;
&lt;br /&gt;
The session changes when all users have confirmed a session. When a user leaves while another user trys to join, the leave protocol will take priority and a new participant info message is sent to the joining user after all leaving users have left. When multiple users are joining, when the confirmed participant receives the first joiner auth, it will halt the protocol for other joining users. When the session is confirmed, the new participant info list will be sent to the remaining joining users.&lt;br /&gt;
&lt;br /&gt;
= '''IX Cryptographic Primitives''' =&lt;br /&gt;
&lt;br /&gt;
==IX.1 Hash Function==&lt;br /&gt;
SHA256 is being used as the hash function and the random oracle. SHA256 provides a sufficiently secure hash primitive for the level of security provided by ''(n+1)sec'' and is widely implemented.&lt;br /&gt;
&lt;br /&gt;
==IX.2 Message Origin Authentication ==&lt;br /&gt;
ED25519 has been chosen as the signature primitive due to its efficiency and more secure implementability over other elliptic-curve digital signature algorithms. [Be11]&lt;br /&gt;
&lt;br /&gt;
==IX.3 Message Encryption ==&lt;br /&gt;
We are using AES-256 in Galois/Counter Mode (GCM) with a shared group key for message encryption, we are following the suggestion by the original OTR protocol of using counter mode. However, unlike OTR, &amp;lt;math&amp;gt;(n+1)sec&amp;lt;/math&amp;gt; does not support per message forgeability (although the whole transcript is forgeable), it is not prohibitive to use the same key for encryption and authentication.&lt;br /&gt;
&lt;br /&gt;
The added authentication, spares P@P send and receive routines from using digital signature.&lt;br /&gt;
&lt;br /&gt;
With GCM mode, the authenticated encryption is generically secure by the result (and assumptions) of [Kr00].&lt;br /&gt;
&lt;br /&gt;
==IX.4 GroupEnc and GroupDec Functions ==&lt;br /&gt;
The ''GroupEnc'' and ''GroupDec'' functions defined in Section VIII.1, facilitate the collective generation of a secret(s) shared by the group. Here we mention two examples of such functions, and specify the functions for ''(n+1)sec' protocol:&lt;br /&gt;
&lt;br /&gt;
* '''Naive peer-to-peer GroupEnc/Dec''':&lt;br /&gt;
The simplest path to design such primitives is to encrypt &amp;lt;math&amp;gt;z'_i&amp;lt;/math&amp;gt; using the p2p encryption secret between each pair of participants:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;GroupEnc((k_{i,1},...,k_{i,n}),z'_i) := (E_{k_{i,1}}(z'_i),...,E_{k_{i,n}}(z'_i))&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;GroupDec((k_{i,1},...,k_{i,n}),(z_1,...,z_n)) := (D_{k_{i,1}}(z_1[i]),...,D_{k_{i,n}}(z_n[i]))&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Linear System based GroupEnc/Dec''':&lt;br /&gt;
&lt;br /&gt;
Another possibility is that each user generates k linear equations of l variables such if the system of &amp;lt;math&amp;gt;k.n&amp;lt;/math&amp;gt; equations has m independent equations then m &amp;lt; l. The remaining equations should be generated using the mutual secrets &amp;lt;math&amp;gt;k_{i,j}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
An example of such a system is used by [BuDe95]. In which &amp;lt;math&amp;gt;k = 1, l = n+1, m = n&amp;lt;/math&amp;gt; as follows:&lt;br /&gt;
&lt;br /&gt;
Each user U_i generate equations (k_{i,i-1}+k_{i,i+1}=a_i) so the system for n equation &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; variable will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\matrix{ x_1 + x_2 = a_1 \\&lt;br /&gt;
          x_2+x_3= a_2 \\&lt;br /&gt;
          \vdots \\&lt;br /&gt;
          x_n + x_{n-1} = a_n \\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then each participant adds the equation of &amp;lt;math&amp;gt;x_i = k_{i,i+1}&amp;lt;/math&amp;gt; to the system and solves the derived system of &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt;-equation &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt;-unknown to recover the secrets.&lt;br /&gt;
&lt;br /&gt;
in such a system:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z'_i := k_{i,i-1} = k{i-1,i}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;GroupEnc((k_{i,1},...,k_{i,n}),z'_i, z'_{i+1}) := z'_{i} \oplus z'_{i+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
''(n+1)sec'' uses the modification of the primitive suggested in [ACMP10] to guard the confidentiality of the p2p and the subgroup keys:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
z'_i := H(k_{i,i-1}, sid_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While the naive peer to peer primitive is easier to understand and analyse, the second system gives the flexibility for the implementor to decide the trade off between the amount of data (number of equations) vs. the redundancy in the system (if some equations are not delivered the user can still compute a subset of secrets).&lt;br /&gt;
&lt;br /&gt;
= X. Next Steps =&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;T&amp;lt;/span&amp;gt;his document is the first public draft of the ''(n+1)sec'' protocol. We are genuinely hoping to receive a lot of feedback and review on this work and have chosen the wiki format to support [[Talk:Nsec|Discussion]]. Ongoing tasks for the team include mathematical proofs of resistance to the adversarial model presented herein as well as technical implementation details. This is currently scheduled for the end of December, 2014. The [https://github.com/equalitie/np1sec np1sec] software library will be initially implemented in [https://github.com/cryptocat/cryptocat/ Cryptocat] and (with your help) further developed to suit a variety of use-cases in the near future.&lt;br /&gt;
&lt;br /&gt;
= XI. Acknowledgements =&lt;br /&gt;
The eQualit.ie team would like to give special thanks and note to the effort and dedication offered by Trevor Perrin and Ximin Luo to this project. They have been actively involved throughout the year and the result would not have been the same without their contribution. The team would also like to express thanks to Joseph Bonneau for his constructive comment and critisim to improve the protocol and its presentation. George Kadianakis for helping with the security proof and pointing out flaws and attack; Arlo Breault for his work on implementation of the protocol in the [https://github.com/equalitie/np1sec np1sec] software library; David Goulet for valuable advice as well as continued assistance and support offered to the project; Prof. Payman Mohassel for his help and advice on the security model and the proof; Prof. Jermey Clark, Prof. Matthew Green and Frederic Jacobs for their constructive participation in the design debates; Prof. Mark Manulis for suggesting the GKA. eQualit.ie expresses gratitude to Nadim Kobeissi, Cryptocat founder and developer who initiated the project and for sharing his experience and giving advice on secure browser based chat. Last but not least we would like to thank the Open Technology Fund for supporting the project.&lt;br /&gt;
&lt;br /&gt;
= XII. References =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;references&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HarvardReferences&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[*ACMP10] Michel Abdalla, Céline Chevalier, Mark Manulis, and David Pointcheval. “Flexible Group Key Exchange with on-Demand Computation of Subgroup Keys.” In ''Third African International Conference on Cryptology (AfricaCrypt ’10)'', edited by Dan Bernstein and Tanja Lange, 6055:351–368. LNCS. Stellenbosch, South Africa, 2010: Springer. &lt;br /&gt;
&lt;br /&gt;
[*Be11] Bernstein, Daniel J.; Duif, Niels; Lange, Tanja; Schwabe, Peter; Yang, Bo-Yin. &amp;quot;High-Speed High-Security Signatures.&amp;quot;,&amp;quot;CHES&amp;quot;,&amp;quot;978-3-642-23950-2&amp;quot;,&amp;quot;http://dblp.uni-trier.de/db/conf/ches/ches2011.html#BernsteinDLSY11&amp;quot;. 2011. pages: 124-142&amp;quot;,&amp;quot;6917&amp;quot;,&amp;quot;Lecture Notes in Computer Science&amp;quot;,&amp;quot;Springer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[*BS07] Bohli, Jens-Matthias, and Rainer Steinwandt. 2007. “Deniable Group Key Agreement.” In ''VIETCRYPT'', edited by Phong Q. Nguyen, 4341:298–311. Lecture Notes in Computer Science. Springer. http://dblp.uni-trier.de/db/conf/vietcrypt/vietcrypt2006.html#BohliS06.&lt;br /&gt;
&lt;br /&gt;
[*BVS05] Bohli, Jens-Matthias, Maria Isabel Gonzalez Vasco, and Rainer Steinwandt. 2005. “Secure Group Key Establishment Revisited.” ''IACR Cryptology ePrint Archive'' 2005: 395. http://dblp.uni-trier.de/db/journals/iacr/iacr2005.html#BohliVS05a.&lt;br /&gt;
&lt;br /&gt;
[*BM] Bonneau, Joseph, and Andrew Morrison. “Finite-State Security Analysis of OTR Version 2.” http://www.jbonneau.com/doc/BM06-OTR_v2_analysis.pdf&lt;br /&gt;
&lt;br /&gt;
[*BGB04] Borisov, Nikita, Ian Goldberg, and Eric Brewer. 2004. “Off-the-Record Communication, or, Why Not to Use PGP.” In ''Proceedings of the 2004 ACM Workshop on Privacy in the Electronic Society'', 77–84. WPES ’04. New York, NY, USA&lt;br /&gt;
&lt;br /&gt;
[*BCGNP08] Colin Boyd, Yvonne Cliff, Juan Gonzalez Nieto, and &amp;lt;span&amp;gt;KennethG.&amp;lt;/span&amp;gt; Paterson. 2008. “Efficient One-Round Key Exchange in the Standard Model.” In ''Information Security and Privacy'', edited by Yi Mu, Willy Susilo, and Jennifer Seberry, 5107:69–83. Lecture Notes in Computer Science. Springer Berlin Heidelberg.&lt;br /&gt;
&lt;br /&gt;
[*BoMa10] Boyd, Colin; Mathuria, Anish. &amp;quot;Protocols for Authentication and Key Establishment&amp;quot;,&amp;quot;3642077161, 9783642077166&amp;quot;,2010, Springer Publishing Company, Incorporated, 1st edition&lt;br /&gt;
&lt;br /&gt;
[*BCP01] Emmanuel Bresson, Olivier Chevassut, and David Pointcheval. 2001. “Provably Authenticated Group Diffie-Hellman Key Exchange - the Dynamic Case.” In ''Advances in Cryptology - Proceedings of ASIACRYPT ’01'', edited by Colin Boyd, 2248:290–309. LNCS. Gold Coast, Australia: Springer. &lt;br /&gt;
&lt;br /&gt;
[*BCPQ01] Emmanuel Bresson, Olivier Chevassut, David Pointcheval, and Jean-Jacques Quisquater. 2001. “Provably Authenticated Group Diffie-Hellman Key Exchange.” In ''Proceedings of the 8th ACM Conference on Computer and Communications Security (CCS ’01)'', edited by Mike Reiter, 255–264. Philadelphia, Pennsylvania.&lt;br /&gt;
&lt;br /&gt;
[*CaKr01] Ran Canetti, Hugo Krawczyk. 2001. “Analysis of Key-Exchange Protocols and Their Use for Building Secure Channels” “EUROCRYPT Conference. Lecture Notes in Computer Science”. Edited by Birgit Pfitzmann. &lt;br /&gt;
&lt;br /&gt;
[*ChMa10] Qingfeng Cheng, Chuangui Ma, &amp;quot;Security Weakness of Flexible Group Key Exchange with On-Demand Computation of Subgroup Keys&amp;quot;, CoRR, 2010, http://arxiv.org/abs/1008.1221&lt;br /&gt;
&lt;br /&gt;
[*Da14] George Danezis, Should Group Key Agreement be Symmetric and Contributory, http://conspicuouschatter.wordpress.com/2014/06/28/should-group-key-agreement-be-symmetric-and-contributory/&lt;br /&gt;
&lt;br /&gt;
[*Da02] Davis, Don,&amp;quot;Defective Sign &amp;amp; Encrypt in S/MIME, PKCS#7, MOSS, PEM, PGP, and XML.&amp;quot;,&amp;quot;USENIX Annual Technical Conference, General Track&amp;quot;,&amp;quot;1-880446-09-X&amp;quot;,&amp;quot;http://dblp.uni-trier.de/db/conf/usenix/usenix2001g.html#Davis01&amp;quot;,&amp;quot;2002-09-022001&amp;quot;, page 65-78&lt;br /&gt;
&lt;br /&gt;
[*GUVGC09] Ian Goldberg, Berkant Ustao&amp;lt;span&amp;gt;\&amp;lt;/span&amp;gt;uglu, Matthew D. Van Gundy, and Hao Chen. 2009. “Multi-Party Off-the-Record Messaging.” In ''Proceedings of the 16th ACM Conference on Computer and Communications Security'', 358–368. CCS ’09. New York, NY, USA: ACM. &lt;br /&gt;
&lt;br /&gt;
[*GBN10] M. Choudary Gorantla, Colin Boyd, and Juan Manuel González Nieto. 2010. ''One Round Group Key Exchange with Forward Security in the Standard Model''. http://eprint.iacr.org/2010/083.pdf&lt;br /&gt;
&lt;br /&gt;
[*GBNM11] M. Choudary Gorantla, Colin Boyd, Juan Manuel González Nieto, and Mark Manulis. 2011. “Modeling Key Compromise Impersonation Attacks on Group Key Exchange Protocols.” 'ACM Trans. Inf. Syst. Secur.&lt;br /&gt;
&lt;br /&gt;
[*Gun13a]  Matthew Van Gundy. April 2013. “[OTR-dev] Improved Deniable Signature Key Exchange for mpOTR.” &lt;br /&gt;
http://matt.singlethink.net/projects/mpotr/improved-dske.pdf&lt;br /&gt;
&lt;br /&gt;
[*Gun13b]  Matthew Van Gundy March 2013. “[OTR-dev] Improved Deniable Signature Key Exchange for mpOTR.”&lt;br /&gt;
http://lists.cypherpunks.ca/pipermail/otr-dev/2013-March/001676.html.&lt;br /&gt;
&lt;br /&gt;
[*Kr00], &amp;quot;Krawczyk, Hugo&amp;quot;,&amp;quot;The order of encryption and authentication for protecting communications (Or: how secure is SSL?), 2001, Published: Cryptology ePrint Archive, Report 2001/045 http://eprint.iacr.org/&lt;br /&gt;
&lt;br /&gt;
[*KPW13] Hugo Krawczyk and Kenneth G. Paterson, Hoeteck Wee. 2013. “On the Security of the TLS Protocol: A Systematic Analysis” in&lt;br /&gt;
''IACR Cryptology ePrint Archive''.&lt;br /&gt;
&lt;br /&gt;
[*LVH13] Liu, Hong; Vasserman, Eugene Y.; Hopper, Nicholas. &amp;quot;Improved Group Off-the-record Messaging&amp;quot; from the ''Proceedings of the 12th ACM Workshop on Workshop on Privacy in the Electronic Society'', 978-1-4503-2485-4, 'ACM', New York, NY, USA.  2013&lt;br /&gt;
&lt;br /&gt;
[*Mo13] Marlinspike, Moxie,&amp;quot;Simplifying OTR deniability&amp;quot; blogpost, Open Whispersystems, https://whispersystems.org/blog/simplifying-otr-deniability/&lt;br /&gt;
&lt;br /&gt;
[*Sys14] Marlinspike, Moxie et al. Whisper Systems. 2014. “TextSecure ProtocolV2.” Accessed March 2. https://github.com/WhisperSystems/TextSecure/wiki/ProtocolV2.&lt;br /&gt;
&lt;br /&gt;
[*RGK05] Mario Di Raimondo, Rosario Gennaro, and Hugo Krawczyk. 2005. “Secure Off-the-Record Messaging.” In ''WPES'', 81–89. Alexandria, VA, USA. http://dl.acm.org/citation.cfm?doid=1102199.1102216&lt;br /&gt;
&lt;br /&gt;
[*KiSo00] Song, Boyeon; Kim, Kwangjo, &amp;quot;Two-Pass Authenticated Key Agreement Protocol with Key Confirmation&amp;quot;,&amp;quot;Progress in Cryptology —INDOCRYPT 2000&amp;quot;,&amp;quot;978-3-540-41452-0&amp;quot;,&amp;quot;http://dx.doi.org/10.1007/3-540-44495-5_21&amp;quot;,&amp;quot;2000&amp;quot;; &amp;quot;237-249&amp;quot;,1977 &amp;quot;Lecture Notes in Computer Science&amp;quot;,Springer Berlin Heidelber.&lt;br /&gt;
&lt;br /&gt;
[*Git11] https://github.com/hellais/cryptocat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/HarvardReferences&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Appendix A: Asynchronous communication and Forward Secrecy==&lt;br /&gt;
&lt;br /&gt;
The protocol is primarily targeted to synchronous cases, however, with some modification it can be used for asynchronous cases.&lt;br /&gt;
&lt;br /&gt;
Provided that the participants are not concerned with authenticating the list of participants (it is OK if Eve impersonates Bob as long as she is unable to read Bob’s messages). Participants can communicate using their pairwise exchanged ephemeral Diffie-Hellman keys until all participants finish the second round of authentication.&lt;br /&gt;
&lt;br /&gt;
As soon as a deniable handshake has been established among a set of participants any subset of them can communicate and authenticate their messages using the “session key” and their ephemeral signature key.&lt;br /&gt;
&lt;br /&gt;
The protocol does not enforce explicitly a time limit on renewing the session key shares and can be used for an asynchronous high latency transport after the key establishment state.&lt;br /&gt;
&lt;br /&gt;
The downside of using a session key for a long time is that a compromised session key will reveal all past communication during that session. This does not pose an imminent threat when the life span of a chat is short. However, in the context of asynchronous high latency transport, it is a more serious concern.&lt;br /&gt;
&lt;br /&gt;
The protocol requires the participants to pre-emptively update their ephemeral signature/shares and propagate them as part of the messages they are already sending. Subsequently, they also update their key share with their neighbours as soon as the neighbours also propagate their new ephemeral signature keys.&lt;br /&gt;
&lt;br /&gt;
As the assumption of having a continuous heartbeat might not be realistic in various asynchronous cases, implementations can assume specific deadlines for dropping users who did not communicate their new keys or shares.&lt;br /&gt;
&lt;br /&gt;
==Appendix B: Other design possibilities==&lt;br /&gt;
During the process of designing ''(n+1)sec'' we have considered and debated other design possibilities which we will describe in this section along side our arguments in favour of the choices made.&lt;br /&gt;
&lt;br /&gt;
===Group Key Scheme vs Broadcast Scheme===&lt;br /&gt;
We say a group key scheme (as defined in [[#V._Chat_Session_Model|Section V]]) is correct if all accepted instances of &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; end up with the same participant lists &amp;lt;math&amp;gt;plist_i&amp;lt;/math&amp;gt; and compute the same session id. &lt;br /&gt;
&lt;br /&gt;
By contrast, a broadcast scheme refers to a scheme in which each participant is broadcasting a message to a set of participants of their choice from a set of potential participants. Each participant will have its own different &amp;lt;math&amp;gt;plist_i&amp;lt;/math&amp;gt; which is able to broadcast as well. See GOTR by [LVH13] For an example of such scheme where each participant chooses there own circle of audiances. &amp;lt;!--In such protocol we define &amp;lt;math&amp;gt;plist_{union} := \cup{i \in {interested participants}} plist_i&amp;lt;/math&amp;gt;.--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Therefore, in the context of a chat room, broadcasting scheme participants do not have the same view of the room and consequently we cannot compute a unified session id &amp;lt;math&amp;gt;sid&amp;lt;/math&amp;gt; based on the list of the participants (as opposed to the group key scheme). In a group key scheme, it is the name of the chat room plus a set of ephemeral keys and the set of ephemeral public keys which uniquely identifies the session. There are advantages and disadvantages to each of these schemes, which we enumerate here:&lt;br /&gt;
&lt;br /&gt;
# Chat room simulation: A group scheme simulates a normal chat room in the absence of an authentication adversary, where the participants all have the same view of who is in the chat room when they start talking. This is not the case in a broadcasting scheme as participants keep different participant lists. This is in conflict with the security assumptions of the authentication properties from the original proposal for ''(n+1)sec''.&lt;br /&gt;
# Consistency: In a group key exchange, the consistency of the participant list (and session id) is provided by the group key exchange protocol. In such a protocol, extra measures need to be taken only to assure the transcript's consistency, i.e. verification of the consistency of delivery and order of messages exchanged between participants. In a broadcast scheme, a new notion needs to be defined and enforced so that a minimum consistency of a conversation can be simulated. For example, as broadcasting to a subset of potential participants is allowed, the notion needs to deal with a situation in which A receives the DH public key of B but wants to send a message to the &amp;quot;room&amp;quot; before it receives the DH key of C.&lt;br /&gt;
# Delayed join and leave: In a group scheme, until all participants confirm their identical view of a new participant list (due to a member joining or leaving the room), they need to assume the status quo. This might delay a new participant from joining a chat or, if no further measure is taken, enable a participant to deny join/leave for the whole group. While various mitigation methods are possible against such attacks (all summarized under the umbrella term &amp;quot;Denial of Service&amp;quot; ) they are not included in threat model considered in ''(n+1)sec'' protocol. &lt;br /&gt;
&lt;br /&gt;
Based on the above differences, we selected a group key scheme for the proposed protocol. This is primarily because room consistency is one of the main security properties desired. However, when it is critical, the sub-protocol described by [[#Sending_and_receiving_messages_ while_joining_is_in_progress|Section VIII.2 Sending and receiving messages while joining is in progress]] allows for communication with users while they are waiting for the join procedure to complete.&lt;br /&gt;
&lt;br /&gt;
===Participatory vs individually independent computation of group key(s)===&lt;br /&gt;
Most AKGE offer some degree of contributiveness in computing the group secret. This roughly means that (at least in the absence of an insider) the group secret is derived using contribution from all members of the group. There has been criticism of the importance of this property such as in [Da14]. In this section we consider briefly the arguments for each side and describe the rational for our choice.&lt;br /&gt;
&lt;br /&gt;
[[Category: np1sec]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Np1sec</id>
		<title>Np1sec</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Np1sec"/>
				<updated>2014-12-18T22:31:08Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* VIII.6 Reaching Consistency */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Np1sec-web.jpg|frameless|center|(n+1)sec]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
{{DISPLAYTITLE:(n+1)sec}}&lt;br /&gt;
===Abstract===&lt;br /&gt;
&lt;br /&gt;
''In this document we present the first public draft of ''(n+1)sec'' - a secure multi-party communication protocol developed by eQualit.ie with support from the [https://www.opentechfund.org/ Open Technology Fund] and [https://crypto.cat/ Cryptocat]. We include the design rationale, choice of security features, adversarial models, schematic and high level specification of sub-protocols. A subsequent document will present security proofs and implementation details.''&lt;br /&gt;
&lt;br /&gt;
=I. INTRODUCTION=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;T&amp;lt;/span&amp;gt;he ''(n+1)sec'' project was inspired by [https://otr.cypherpunks.ca/Protocol-v3-4.0.0.html Off-The-Record] messaging protocol and subsequent efforts to explore a multiparty use-case for OTR in [GUVGC09]. ''(n+1)sec'' is currently developed for [https://github.com/cryptocat/cryptocat/wiki/mpOTR-Project-Plan Cryptocat] - a browser based XMPP chat platform and assumes its use-cases. Most importantly, ''(n+1)sec'' allows for secure multi-party key exchange and end-to-end encrypted communications without extensive computational requirements from the client. You can follow and contribute to the implementation of [https://github.com/equalitie/np1sec np1sec] on our Github pages. Future protocol iterations will consider a variety of other real-world use cases and be platform independent. Please use the [[Talk:Np1sec|Discussion]] page to ask questions and leave comments.&lt;br /&gt;
&lt;br /&gt;
In the following section we summarise relevant publications and describe their influence on this protocol. In [[#III._Design_rationale|Section III]], we describe our approach and choice of security features. In [[#IV._Security_Properties|Section IV]], we review the security properties within this protocol. In [[#V._Chat_Session_Model|Section V]] we give basic mathematical definition needed to model the chat session and security proofs for various security aspects of the protocol. [[#IV._Adversarial_Models|Section VI]] provides formal definitions and references to the adversarial models for each property. In [[#VII._Protocol_High_Level_Design|Section VII]] we describe various parts of the protocol and present choices for each sub protocol. In [[#VIII._''(n+1)sec''_Protocol:_Step_by_Step|Section VIII]], we present each of the ''(n+1)sec'' protocol steps at various stages in schematic and algorithmic format. We present our choice of primitives in [[#iX._Cryptographic_Primitives|Section IX]]. Finally, we define the work that [[#Next_Steps|remains to be done]] on this protocol and [[#XI._Acknowledgements|acknowledge]] the good people who have helped us get here.&lt;br /&gt;
&lt;br /&gt;
= II. History and literature review =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;T&amp;lt;/span&amp;gt;wo-party Off The Record messaging (OTR) was introduced in [BGB04] as an alternative to PGP for secure casual Internet chat by providing necessary forward secrecy and deniable transcript features. The paper proposes the use of symmetric encryption and message authentication in OTR for confidentiality and integrity, and the Diffie-Hellman key exchange for authenticating the other party in the chat. Since publication in 2004, it has defined the standard for secure Internet chat attracting a lot of academic attention and security analysis. The OTR protocol is now at [https://otr.cypherpunks.ca/Protocol-v3-4.0.0.html Version 3] and the [https://otr.cypherpunks.ca/index.php#downloads libotr software libraries] are continuously updated. Our research and literature review focused on the protocol presented in [BGB04] and the subsequent proposal for a multiparty use-case in [GUVGC09].&lt;br /&gt;
&lt;br /&gt;
In [RGK05], researchers point out that OTR’s approach to authenticate renewed ephemeral session keys is provided by the property of confidentiality and is therefore dependent on the secrecy of the conversation. Hence, breaking the secrecy of the conversation (e.g. by leaking the session key) will lead to false authentication as well. They offer two authenticated deniable key exchange protocols, which also provide forward secrecy, as a replacement for OTR’s original key exchange. Furthermore, they argue that forgeability and malleability do not have any mathematical consequence in improving deniability if the parties have been authenticated by a deniable key exchange scheme. They argue that as these properties pose potential security threats, it is desirable to omit them from the protocol entirely.&lt;br /&gt;
&lt;br /&gt;
An alternative appears in [BS07], using the Schnorr zero-knowledge proof and signature algorithm, to introduce a 4-round challenge-based authentication scheme that grants deniability to the two-round authenticated protocol described in [BVS05].&lt;br /&gt;
&lt;br /&gt;
[ACMP10] offers a more efficient protocol than [BS07] in the sense that ephemeral Diffie-Hellman elements are reusable to regenerate keys when some of the participants change. As such, it offers a one-round protocol to generate a key for a subgroup of the original conversation.&lt;br /&gt;
&lt;br /&gt;
An unauthenticated exchange of the OTR version identifier can pose a threat to authenticity as shown in [BM]: the adversary can force clients to downgrade to an older, (potentially insecure) version of the protocol. They also note the Diffie-Hellman key exchange failure in delivering authentication in the presence of an active adversary. Furthermore, they show that the early publication of MAC keys for the purpose of forgeability can easily enable the active adversary to forge messages during the conversation (instead of the intended forgeability after the conversation has ended). Finally, they argue that in an environment where the adversary is controlling the whole network, she can effectively disarm the protocol of its forgeability property.&lt;br /&gt;
&lt;br /&gt;
Various attempts have been made to construct an efficient multiparty (known as group) authenticated key exchange protocol. OTR authors proposed a generalisation of two-party OTR to a multiparty use-case in [GUVGC09]. However, they did not specify the cryptographic primitives, neither did they give a formal definition of the adversaries nor the proof of the algorithm’s security (reduction). Although a more robust key exchange is proposed, some primary performance analysis of the implementation of the key agreement protocol has been shown to be impractically slow, especially on mobile devices [Gun13a][Git11].&lt;br /&gt;
&lt;br /&gt;
[LVH13] proposes GOTR as an alternative to [GUVGC09] with a goal of improving on some of its security properties. A notable change is the use of p2p private channels to send message digest so as to establish transcript consistency and implicit message origin authenticity between users. GOTR also strives to improve on repudiability by considering deniability against an 'online judge' as well as forgeability for the entire transcript by a single party (this is possible in [GUVGC09] as long as a deniable AKE is being used). The idea of online repudiabilty relies on the judge controlling up to '''N-2''' parties while the two remaining &amp;quot;honest&amp;quot; parties are allowed to collude. This is slightly unusual for both repudiability and honesty. [LVH13] also proposes an involved contributory BD based key agreement scheme, which disregard room consistency and turns GOTR into a broadcast scheme (c.f. [[#Appendix_B:_Other_design_possibilities|Appendix B]]).&lt;br /&gt;
&lt;br /&gt;
=III. Design rationale =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;O&amp;lt;/span&amp;gt;ur approach for ''(n+1)sec'' design was based on the following requirements, in order of importance:&lt;br /&gt;
&lt;br /&gt;
# A protocol that is provably secure in a sufficiently strong adversarial model that addresses confidentiality, authenticity and forward secrecy&lt;br /&gt;
# Applicable to the [https://github.com/cryptocat/cryptocat/wiki/Design-and-Functionality Cryptocat XMPP use-case]&lt;br /&gt;
# Providing some degree of deniability when it does not negatively impact usability or our [[#IV._Security_Properties|security goals]]&lt;br /&gt;
# Addressing security flaws in [BGB04] and [GUVGC09]&lt;br /&gt;
&lt;br /&gt;
We designate the protocol suggested in [GUVGC09] as our starting point and apply various modifications to reach a desirable protocol  satisfying the above stated goals. &lt;br /&gt;
&lt;br /&gt;
A significant portion of our research suggested a better performing, more secure alternative to the key exchange protocol suggested in [GUVGC09]. Based on conclusions in [BM] and [RGK05], we are making the following design changes:&lt;br /&gt;
&lt;br /&gt;
* Using a more secure deniable key exchange algorithm, instead of naive Diffie-Hellman&lt;br /&gt;
&lt;br /&gt;
In designing ''(n+1)sec''’s deniable authentication and key agreement protocol, we have followed [ACMP10] by choosing a provably secure authenticated key exchange method and replacing the signature-based authentication with a deniable one. We have chosen the protocol introduced in [ACMP10] instead of [BS07], due to its superior efficiency. We abstract out the method where parties communicate their secret for additional flexibility.&lt;br /&gt;
&lt;br /&gt;
* Using a more practical algorithm, rather than the peer-to-peer signature key exchange&lt;br /&gt;
&lt;br /&gt;
We have chosen the two round SKEME-based Triple Diffie-Hellman deniable key authentication instead of the Schnorr signature scheme suggested in [BS07] because it saves us two critical rounds for authentication (even though it offers a slightly weaker form of deniability). We have also modified the protocol to represent the chat condition where participants sequentially join and leave the chat.&lt;br /&gt;
&lt;br /&gt;
* Omitting forgeability and malleability from the protocol and refraining from broadcasting the expired ephemeral authentication keys.&lt;br /&gt;
&lt;br /&gt;
Following conclusions in [RGK05] we have dropped forgeability (mandatory publication of ephemeral signature/MAC keys) and malleability from our requirements since protocol deniability is based on a deniable key exchange. This significantly improves protocol efficiency, a primary focus for ''(n+1)sec''. The deniability of the authentication scheme prevents users not present in a chat session from forging a part of the transcript, however it allows them to forge a whole session with false participants and a complete transcript.&lt;br /&gt;
&lt;br /&gt;
Another major departure from the suggested protocol in [GUVGC09] is in-session transcript authentication, which happens every time a participant receives or sends a message. Transcript authentication (referred to as transcript consistency check from here on) is an optimistic approach based on the assumption that the chat server is mandated to provides a reliable and orderly message delivery, as it is in the case of XMPP protocol. We can ensure transcript consistency whenever the underlying transport layer guarantees the reliable delivery of the messages in the same order for all participants. If however, the underlying protocol does not guarantee reliability either in delivery or order, we report the discrepancy in user's transcript compared to their peers but we do not attempt to correct the transport protocol's action (we offer detection but not recovery).&lt;br /&gt;
&lt;br /&gt;
We also equip ''(n+1)sec'' with heartbeat to ensure in-session forward secrecy, periodical consistency check and freshness. &lt;br /&gt;
&lt;br /&gt;
We propose the possibility of using block-based, rather than stream-based, encryption for the symmetric encryption primitives. &lt;br /&gt;
&lt;br /&gt;
Finally, other protocol design possibilities considered and the rationale for not pursuing them further is discussed in [[#Appendix_B:_Other_design_possibilities|Appendix B: Other design possibilities]]&lt;br /&gt;
&lt;br /&gt;
= IV. Security Properties =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;F&amp;lt;/span&amp;gt;ollowing from the design rationales proposed in Section[[''(n+1)sec''#Design_rationale|III]], we give an informal description of the properties which ''(n+1)sec'' aims to secure in a multi-party chat session:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Participant deniable authenticity'''&amp;lt;/span&amp;gt; based on their long term persistent identity: While a participant in a chat can be sure of another participant’s authenticity, they cannot prove their confidence to anybody else who has not actively participated in the chat session or who has not interacted with the authenticator prior to the session.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Message origin authenticity'''&amp;lt;/span&amp;gt; against both outsider intrusion and the impersonation of existing participants by other malicious participants in the session. This means that the user can be assured of the authenticity of the sender of each original message even if other participants in the room try to impersonate the sender and send messages on their behalf.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Confidentiality'''&amp;lt;/span&amp;gt; of the conversation so its content is not accessible or readable by an outsider.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Forward secrecy'''&amp;lt;/span&amp;gt; of the conversation, so its content remains inaccessible in the event that the long term private key of a participant (which represents their long term identity) is compromised after session key establishment. In addition in-session forward secrecy means that compromise of the ephemeral keys of a participant, or the session key during chat session which is live for long time, would reveal only a fraction of the transcript.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Room consistency'''&amp;lt;/span&amp;gt;, where all participants are confident that they have been participating in the same room; they are confident that everybody in the room believes that everybody else sees the same participant list as they do.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Transcript consistency'''&amp;lt;/span&amp;gt;, where all participants are confident that they have been participating in the same conversation; as the conversation continues, they are confident that they have been seeing the same sequence of messages.&lt;br /&gt;
&lt;br /&gt;
For each of these requirements, it is necessary to formalize the above mentioned properties against an adversarial model which addresses the requirements stated in [[#Design_rationale|Section III]]. The next section will introduce formal definitions covering these elements.&lt;br /&gt;
&lt;br /&gt;
= V. Chat Session Model =&lt;br /&gt;
&lt;br /&gt;
In modelling the chat session, in terms of the adversarial models and protocol specifications, the notation of [ACMP10] is followed. This notation is common to other publication on group key exchange such as [GBNM11], and is adherred to for consistency. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;'''Definition V.1 Multi-party chat session'''&amp;lt;/span&amp;gt;'': Let &amp;lt;math&amp;gt;\mathcal{U} = \{U_1,...,U_m\}&amp;lt;/math&amp;gt; be the set of possible participants. A multi-party chat session is an ordered pair &amp;lt;math&amp;gt;S := (\mathcal{S}, sid)&amp;lt;/math&amp;gt; in which &amp;lt;math&amp;gt;\mathcal{S} \subset \mathcal{U}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;sid&amp;lt;/math&amp;gt; is the unique session id. Without loss of generality we assume &amp;lt;math&amp;gt;\mathcal{S} = \{U_1,...,U_n\}&amp;lt;/math&amp;gt; and we interchangeably refer to party &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; by index ''i''. Furthermore, it is assumed that party &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; is presented and identified verifiably by a long-term persistence key pair &amp;lt;math&amp;gt;(LPK_{U_i}, LSK_{U_i})&amp;lt;/math&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;'''Definition V.2 sub session'''&amp;lt;/span&amp;gt; After session ''S'' is established, A subset of participants  &amp;lt;math&amp;gt;\mathcal{T}\subset \mathcal{S}&amp;lt;/math&amp;gt; might want to start a session in which parties in &amp;lt;math&amp;gt;\mathcal{T}\backslash\mathcal{S}&amp;lt;/math&amp;gt; are excluded (for example when those parties leave the chatroom). In such a setting we say &amp;lt;math&amp;gt;T := (\mathcal{T}, sid^T)&amp;lt;/math&amp;gt; is a subsession of ''S''. When there is no need to specify the subsession of choice, we use &amp;lt;math&amp;gt;spid&amp;lt;/math&amp;gt; to refer to &amp;lt;math&amp;gt;sid^T&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span&amp;gt;'''Definition V.3''' ''An'' '''authenticated group key exchange (AGKE)'''&amp;lt;/span&amp;gt; ''is Algorithm &amp;lt;math&amp;gt;\Pi&amp;lt;/math&amp;gt; which each honest party will execute in order to communicate (by means of sending, receiving or computing) a cryptographic secret - namely a key - among the other parties of a session. By &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; (or &amp;lt;math&amp;gt;\Pi_i&amp;lt;/math&amp;gt; when the underlying session is understood) we are referring to an instance of &amp;lt;math&amp;gt;\Pi&amp;lt;/math&amp;gt; which the party &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; executes to achieve the collective goal. Further more we define'':&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Session id as seen by &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt;'''&amp;lt;/span&amp;gt;'': Session id &amp;lt;math&amp;gt;sid&amp;lt;/math&amp;gt; will be derived during the execution of the protocol. The session id is computed by &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; (the instance of the protocol run by &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; for session ''S'') and is indicated by &amp;lt;math&amp;gt;sid^S_i&amp;lt;/math&amp;gt;, or &amp;lt;math&amp;gt;sid_i&amp;lt;/math&amp;gt; when there is no concern of confusion''&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Participant list'''&amp;lt;/span&amp;gt;'': &amp;lt;math&amp;gt;plist^S_i&amp;lt;/math&amp;gt; is the list of participants which &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; believes are participating in the chat session ''S''.'' When there is no ambiguity in the underlying session, we simply use &amp;lt;math&amp;gt;plist_i&amp;lt;/math&amp;gt; notation.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''key id'' is the serial number given to the P2P keys generated during the process of key exchange, is computed as &amp;lt;math&amp;gt;Hash(U_i|y_i|U_j|y_j)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Ephemeral key list'''&amp;lt;/span&amp;gt;'': &amp;lt;math&amp;gt;klist^S_i&amp;lt;/math&amp;gt; is the list of ephemeral public key &amp;lt;math&amp;gt;y_j = g^{x_j}&amp;lt;/math&amp;gt;'s of all participants which &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; believes they are using in the chat session ''S''.'' When there is no ambiguity in the underlying session, we simply use &amp;lt;math&amp;gt;klist_i&amp;lt;/math&amp;gt; notation instead. We use the notaion of &amp;lt;math&amp;gt;plist_i|klist_i&amp;lt;/math&amp;gt; to represent ordered concatenation of &amp;lt;math&amp;gt;U_i|y_i&amp;lt;/math&amp;gt; pairs as in &amp;lt;math&amp;gt;U_1|y_1|\dots|U_n|y_n&amp;lt;/math&amp;gt;. The order is assumed to be computable by all participants (lexicographically ordered using long term public key of participants, for example).&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Session key of &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt; as seen by &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt;'''&amp;lt;/span&amp;gt;'': &amp;lt;math&amp;gt;sk^S_i&amp;lt;/math&amp;gt; (or &amp;lt;math&amp;gt;sk_i&amp;lt;/math&amp;gt;) is the session key of session ''S'' as computed by &amp;lt;math&amp;gt;\Pi_i&amp;lt;/math&amp;gt;. It represents the cryptographic secret computed by AGKE, it can be a set of secrets. The essential defining factor is that it should become common knowledge for the session participants at the end of AGKE execution. Similarly we define &amp;lt;math&amp;gt;subk_i&amp;lt;/math&amp;gt; to represent the subsession key''&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Accepted state'''&amp;lt;/span&amp;gt;'': A party enters the accepted state if it has computed &amp;lt;math&amp;gt;sk^S_i&amp;lt;/math&amp;gt; and has detected no errors in the protocol.''&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Partnered instances'''&amp;lt;/span&amp;gt;'': Two instances &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt; are considered partnered if and only if both instances have accepted &amp;lt;math&amp;gt;sid_i=sid_j&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;plist_i = plist_j&amp;lt;/math&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
* A &amp;lt;span&amp;gt;'''correct'''&amp;lt;/span&amp;gt;'' AKGE algorithm is an AKGE which, when all &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; instances of AKE algorithm are initiated with access to a network which correctly forwards all messages without modification, all participants ultimately are partnered and all compute equal &amp;lt;math&amp;gt;sk^S_i&amp;lt;/math&amp;gt;’s''.&lt;br /&gt;
&lt;br /&gt;
When underlying session are not considered we may omit the super script &amp;lt;math&amp;gt;\_^S&amp;lt;/math&amp;gt; from all above notations.&lt;br /&gt;
&lt;br /&gt;
= VI. Threat Models and Adversarial Goals =&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt;dversarial models are explained as a game, in which the adversary's possibilitiy of winning the game should be considered in terms of their ability to break the cryptographic primitives.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Accordingly to the requirements discussed in Section [[''(n+1)sec''#Security_Properties|IV]], it is necessary to examine the algorithm in terms of following threat cases:&lt;br /&gt;
&lt;br /&gt;
# Deniable Authenticated key exchange (including a forward secrecy adversary)&lt;br /&gt;
# Message origin authenticity&lt;br /&gt;
# Confidentiality&lt;br /&gt;
# Transcript consistency&lt;br /&gt;
&lt;br /&gt;
The following sections will define adversarial scenarios which represent the above threats.&lt;br /&gt;
&lt;br /&gt;
==Deniable Authenticated Key Exchange Adversary==&lt;br /&gt;
Following the approach in [BoSt06] the model is divided into two adversaries: ''Authenticated Group Key Exchange'' and the ''Deniability Adversary''.&lt;br /&gt;
&lt;br /&gt;
As deniability is not our primary focus, we wil consider a weaker deniability adversarial model, which limits possible input similarly to the limitations considered by [GKR06]. This provision would disallow an input from the 'judge' and therefore saves an extra round of communication within the protocol.&lt;br /&gt;
&lt;br /&gt;
Because he t''(n+1)sec'' protocol runs a peer-to-peer key exchange and establishes parallel deniable authentication, we use the adversarial model from [ACMP10] for ''authenticated group key exchange''. This ensures the security of both group and peer-to-peer keys independently. The protocol also takes advantage of &amp;quot;single&lt;br /&gt;
round computation of a subgroup key&amp;quot;. Meaning that when a participant leaves the session remaining participants can re-establish a (sub)session with only one round of communication. In this circumstance, the model must also consider an adversary's attack against the subgroup key.&lt;br /&gt;
&lt;br /&gt;
We do not attempt to model resistance against internal key compromise impersonation (KCI) as defined [GBNM11].&lt;br /&gt;
&lt;br /&gt;
===Authenticated Key Exchange Adversary===&lt;br /&gt;
====Adversarial power====&lt;br /&gt;
&lt;br /&gt;
The following set of functions model the AKE adversarial threats. The adversary for the authenticated key exchange can mount an attack through a sequence of call to the functions, outlined below. The limitation on the order and condition of calling these functions is defined per adversary. We will re-use these definitions to demonstrate similar routes for other adversaries considered by the threat models in later sections.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Execute(&amp;lt;math&amp;gt;plist&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt;: asks all parties in the &amp;lt;math&amp;gt;plist&amp;lt;/math&amp;gt; to run (a new) AGKE protocol and &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; will receive the execution transcript, i.e.&amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; can eavesdrop.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Send(&amp;lt;math&amp;gt;\Pi^S_i,m&amp;lt;/math&amp;gt;)/(&amp;lt;math&amp;gt;U_i,m&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt; sends a message ''m'' to the instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;. We assume that ''m'' contains information to identify the sender &amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; will receive the execution transcript. Specifically, by sending &amp;lt;math&amp;gt;plist&amp;lt;/math&amp;gt; messages it forces &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; to initiate &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''SKE(&amp;lt;math&amp;gt;\Pi^S_i, spid_i&amp;lt;/math&amp;gt;)''': asks &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; to compute the subgroup key for the &amp;lt;math&amp;gt;spid_i&amp;lt;/math&amp;gt; subsession. In response, &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; will either send a message or compute the subgroup key &amp;lt;math&amp;gt;k_{spid_i}&amp;lt;/math&amp;gt; depending on the state of &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;. This can be invoked only once per input. &lt;br /&gt;
* &amp;lt;span&amp;gt;'''RevealGK(&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;)''': &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; gives &amp;lt;math&amp;gt;sk_i&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;\mathcal{A}_a&amp;lt;/math&amp;gt; if it has accepted (as defined in Definition III.3).&lt;br /&gt;
* &amp;lt;span&amp;gt;'''RevealSK(&amp;lt;math&amp;gt;\Pi^S_i, T&amp;lt;/math&amp;gt;)''': &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; gives the &amp;lt;math&amp;gt;subk^T_i&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;\mathcal{A}_a&amp;lt;/math&amp;gt; if it has been computed for subsession ''T''.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''Corrupt(&amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt;: &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; gives its long term secret key to &amp;lt;math&amp;gt;\mathcal{A}_a&amp;lt;/math&amp;gt; (but not the session key).&lt;br /&gt;
&amp;lt;!--This is the power for KCI * &amp;lt;span&amp;gt;'''%% \item {\bf RevealState(&amp;lt;math&amp;gt;\Pi_i&amp;lt;/math&amp;gt;)}: reveal the internal state of &amp;lt;math&amp;gt;\Pi_i&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;\mathcal{A}_a&amp;lt;/math&amp;gt; (no longer available after acceptance).--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Adversary's challenges====&lt;br /&gt;
&lt;br /&gt;
The following set of functions model the adversary's challenges. These reveal either a random value or a key. The adversary's advantage in distinguishing the cases should be translatable into an attack against the GDH primitive for the protocol to be considered secure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span&amp;gt;'''TestGK(&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt;: To the ultimate goal of challenging the confidentially of &amp;lt;math&amp;gt;sk_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; can run TestGK(&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;) against ''U''. As a the result a random bit ''b'' is chosen, if &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; then &amp;lt;math&amp;gt;\mathcal{A}_a&amp;lt;/math&amp;gt; is given &amp;lt;math&amp;gt;sk_i&amp;lt;/math&amp;gt; the session key, otherwise a random value from the same probability distribution is given to &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt;. Obviously, this can only be invoked once and only on accepted participants.&lt;br /&gt;
* &amp;lt;span&amp;gt;'''TestSK(&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt;: To the ultimate goal of challenging the confidentially of &amp;lt;math&amp;gt;subk^T_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; can run TestSK(&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;) against ''U''. The result depends on a a random chosen bit ''b'', if &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; then &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; is given &amp;lt;math&amp;gt;subk^{T}_i&amp;lt;/math&amp;gt; the subsession key, otherwise a random value from the same probability distribution is given to &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Definition of Adversaries and their advantages ===&lt;br /&gt;
&lt;br /&gt;
The following terminology is useful in simplifying the elimination of trivial adversarial threats. &lt;br /&gt;
&lt;br /&gt;
'''Definition VI.1''' Accepted &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;  is '''fresh''' if none of the following is true:&lt;br /&gt;
* RevealGK(&amp;lt;math&amp;gt;\Pi_j^s&amp;lt;/math&amp;gt;) for &amp;lt;math&amp;gt;U_j \in plist&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Corrupt(&amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;) invoked for any &amp;lt;math&amp;gt;U_j \in plist&amp;lt;/math&amp;gt; before any Send(&amp;lt;math&amp;gt;\Pi^S_i,.&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Definition VI.2''' A pair of &amp;lt;math&amp;gt;\Pi^S_i, spid^S_i&amp;lt;/math&amp;gt; is '''fresh''', if &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;  is accepted and if none of the following is true:&lt;br /&gt;
* RevealSK(&amp;lt;math&amp;gt;\Pi_j^s, spid^S_i&amp;lt;/math&amp;gt;) for &amp;lt;math&amp;gt;U_j \in plist&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Corrupt(&amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;) invoked for any &amp;lt;math&amp;gt;U_j \in plist&amp;lt;/math&amp;gt; before any Send(&amp;lt;math&amp;gt;\Pi^S_i,.&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Definition VI.3''' An ''AKE Adversary for the join key agreement'' &amp;lt;math&amp;gt;\mathcal{A}_{join}&amp;lt;/math&amp;gt; is a probabilistic polynomial time algorithm (ppt) which can invoke all the functions given above with a&lt;br /&gt;
condition that the TestGK is invoked '''at least once''' against a fresh instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; which stays fresh until the end of the game. The game ends when &amp;lt;math&amp;gt;\mathcal{A}_{join}&amp;lt;/math&amp;gt; outputs its guess for ''b''. We say a key exchange protocol is secure if the following function is negligible:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
max_{\forall \mathcal{A}_{join}}|2Pr(Output(\mathcal{A}_{join}) = b) - 1|&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly we define &amp;lt;math&amp;gt;\mathcal{A}_{leave}&amp;lt;/math&amp;gt; the Adversary leaving the session:&lt;br /&gt;
&lt;br /&gt;
'''Definition VI.4''' An ''AKE Adversary for the leave key agreement'' &amp;lt;math&amp;gt;\mathcal{A}_{leave}&amp;lt;/math&amp;gt; is a ppt which can invoke all the functions given above with the condition that one of the invocations of TestSK is invoked against a fresh instance &amp;lt;math&amp;gt;(\Pi^S_i, spid_i)&amp;lt;/math&amp;gt; which stays fresh till the the end of the game. The game ends when &amp;lt;math&amp;gt;\mathcal{A}_{join}&amp;lt;/math&amp;gt; outputs its guess for ''b'' for that invocation. We say a key exchange protocol is secure if the following function is negilgible:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
max_{\forall \mathcal{A}_{leave}}|2Pr(Output(\mathcal{A}_{leave}) = b) -1|&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Forward Secrecy Adversary===&lt;br /&gt;
&lt;br /&gt;
We do not define an independent forward secrecy adversary. Forward secrecy can be derived by resistance against the confidentiality adversary as well incorporating a forward secure key exchange as described in [GBN10]. The adversaries of Definition VI.3 and VI.4, are able to ''Corrupt'' users after the communication of DH secrets. Therefore they can trivially break an AKE without forward secrecy. In this sense, the resistance against forward secrecy adversary is included in AKE adversarial model.&lt;br /&gt;
&lt;br /&gt;
===Deniability Adversary===&lt;br /&gt;
&lt;br /&gt;
We use the deniability adversary of [BoSt06], however following the path of [GRK06], we limit the security input of the deniability adversary in order to prevent the adversary from receiving input from the ''judge''.&lt;br /&gt;
&lt;br /&gt;
'''Definition VI.5''' A '''Deniability Adversary '' &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt; with bound &amp;lt;math&amp;gt;q_c&amp;lt;/math&amp;gt; and security input &amp;lt;math&amp;gt;Aux&amp;lt;/math&amp;gt; is a ppt algorithm which can invoke Send and Reveal as desired and Corrupt as many as &amp;lt;math&amp;gt;q_c&amp;lt;/math&amp;gt; times. At the end, &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt; will output a transcript &amp;lt;math&amp;gt;T_{\mathcal{A}_{deny}}(Aux)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Definition VI.6''' For each &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt;, we define a ''simulator'' &amp;lt;math&amp;gt;\mathcal{S}_{deny}&amp;lt;/math&amp;gt;, is a ppt algorithm which receives the same input as &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt;. It can invoke ''Corrupt'' &amp;lt;math&amp;gt;q_c&amp;lt;/math&amp;gt; times in addition to ''Send'' and ''Reveal'' but only against corrupted instances. It terminates by outputting a transcript &amp;lt;math&amp;gt;T_{\mathcal{S}_{deny}(Aux)}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
'''Definition VI.7''' A ''deniability judge'' &amp;lt;math&amp;gt;\mathcal{J}&amp;lt;/math&amp;gt; with security input &amp;lt;math&amp;gt;Aux&amp;lt;/math&amp;gt; is a ppt algorithm which can invoke arbitrary number of deniability adversaries &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt; with security input &amp;lt;math&amp;gt;Aux&amp;lt;/math&amp;gt;. On each execution of &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt; a corresponding &amp;lt;math&amp;gt;\mathcal{S}_{deny}&amp;lt;/math&amp;gt; runs with the same input. At the end a confidential random bit ''b'' is generated, and either &amp;lt;math&amp;gt;T_{\mathcal{A}_{deny}}(Aux)&amp;lt;/math&amp;gt; or &amp;lt;math&amp;gt;T_{\mathcal{S}_{deny}}(Aux)&amp;lt;/math&amp;gt;  is presented to  &amp;lt;math&amp;gt;\mathcal{J}&amp;lt;/math&amp;gt; based on whether &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; or 0 respectively. &lt;br /&gt;
&lt;br /&gt;
'''Definition VI.8''' We call a Group AKE deniable with respect to input set &amp;lt;math&amp;gt;Aux&amp;lt;/math&amp;gt;, if the following advantage is negligible:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
max_{\forall \mathcal{J}}|2Pr(Output(\mathcal{J}, Aux) = b) -1|&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to [GRK06], we claim that the AKE presented in this paper is deniable when &amp;lt;math&amp;gt;Aux&amp;lt;/math&amp;gt; is equal to the set of valid messages eavesdropped by &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt; during other sessions. This, in particular, excludes a transcript computed by &amp;lt;math&amp;gt;\mathcal{J}&amp;lt;/math&amp;gt; such as a group element whose discrete logarithm is only known to &amp;lt;math&amp;gt;\mathcal{J}&amp;lt;/math&amp;gt; (This means &amp;lt;math&amp;gt;\mathcal{A}_{deny}&amp;lt;/math&amp;gt; is given &amp;lt;math&amp;gt;g^a&amp;lt;/math&amp;gt; but is unaware of ''a'').&lt;br /&gt;
&lt;br /&gt;
==Secure Multiparty Channel Adversary==&lt;br /&gt;
The desirable way to define an adversary for a multiparty chat session is a secure channel model similar to the two-party secure channels described in [CaKr01] and [KPW13]. However, defining such a model is outside of our current scope. It is desirable to later improve the security of the protocol bu considering such a model at a later stage. At present, we use a per message model for confidentiality and origin authenticity.&lt;br /&gt;
&lt;br /&gt;
==Message Origin Authentication Adversary==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt;s each participant executes a sign and encrypt function before sending their authenticated ephemeral signing key, the message origin adversary model is based on a typical adversary for a signature scheme such as the one presented in [PVY00].&lt;br /&gt;
&lt;br /&gt;
===Adversarial power===&lt;br /&gt;
&lt;br /&gt;
In addition to adversarial functions defined in section 1.1.1. we must define the following function to allow for the adversary using the chosen-message attack.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span&amp;gt;'''MakeSend(&amp;lt;math&amp;gt;\Pi^S_i,\Pi^S_j, m&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt; causes the &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; to sign and send a valid message ''m'' to instance &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; will receive the transcript including the signature.&lt;br /&gt;
&lt;br /&gt;
===Definition of Adversary===&lt;br /&gt;
&lt;br /&gt;
'''Definition VI.9''': ''Message Origin Authentication Adversary'' &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; is a polynomial time algorithm which has access to the '''Corrupt''', '''Send''', '''Reveal''' and '''MakeSend''' functions. The output of the algorithm should be a message ''m'' sent to instance &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt;. The scheme is secure against Message Origin Adversary if the probability in which &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt; believes that ''m'' has originated from an uncorrupted participant &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; is negligible.&lt;br /&gt;
&lt;br /&gt;
==Message Confidentiality Adversary ==&lt;br /&gt;
&lt;br /&gt;
The goal of adversary &amp;lt;math&amp;gt;\mathcal{A}_{conf}&amp;lt;/math&amp;gt; is to read, at least, part of the communications transcript during the session.&lt;br /&gt;
&lt;br /&gt;
===Adversary's challenges===&lt;br /&gt;
The following set of functions model the confidentiality adversary's challenges. These reveal either a random value or an encrypted message. The adversary's advantage in distinguishing the cases should be translatable into an attack against the block cipher, AES in this case.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span&amp;gt;'''TestM(&amp;lt;math&amp;gt;\Pi^S_i, m&amp;lt;/math&amp;gt;)'''&amp;lt;/span&amp;gt;: To the ultimate goal of challenging the indistinguishibility of &amp;lt;math&amp;gt;E(m)&amp;gt;&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mathcal{A}_{conf}&amp;lt;/math&amp;gt; can execute TestM(&amp;lt;math&amp;gt;\Pi^S_i, m&amp;lt;/math&amp;gt;) against &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt;. As a result a random bit ''b'' is chosen, if &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; then &amp;lt;math&amp;gt;\mathcal{A}_{conf}&amp;lt;/math&amp;gt; is given &amp;lt;math&amp;gt;E_{s_k}(m)&amp;lt;math&amp;gt;, the encrypted message, otherwise a random value from the same probability distribution is given to &amp;lt;math&amp;gt;\mathcal{A}_{conf}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Definition of Adversaries and their advantages===&lt;br /&gt;
&lt;br /&gt;
'''Definition 1''' A ''Confidentiality Adversary'' &amp;lt;math&amp;gt;\mathcal{A}_{conf}&amp;lt;/math&amp;gt; is a ppt which can invoke all the functions given in sections [[''(n+1)sec''#Adversarial_power|IV.1.1.1]] and [[''(n+1)sec''#Adversarial_power|IV.1.1.3]] with the condition that one of the invocations of TestM is invoked against an instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; where all instances in session ''s'' are fresh and stay fresh till the end of the game. The game ends when &amp;lt;math&amp;gt;\mathcal{A}_{conf}&amp;lt;/math&amp;gt; outputs its guess for ''b'' for that invocation. We say that the protocol is secure if the following function is negligible:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
max_{\forall {A}_{conf}}|2Pr(Output(\mathcal{A}_{conf}) = b) -1|&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Consistency Adversary==&lt;br /&gt;
In ''(n+1)sec'' protocol, we attempt to ensure the consistency among participants all along the session incrementally, i.e. assuring consistency after receiving each message in a timely manner. However, we do not model the incremental aspect of consistency into the adversarial model, for the sake of simplicity.&lt;br /&gt;
&lt;br /&gt;
'''Definition 1''' ''Transcript Consistency Adversary'' &amp;lt;math&amp;gt;\mathcal{A}_{cons}&amp;lt;/math&amp;gt; is given the ability to invoke all functions in sections [[''(n+1)sec''#Adversarial_power|IV.1.1.1]] and [[''(n+1)sec''#Adversarial_power|IV.1.1.3]]. We say the protocol is secure against ''Consensus Adversary'' if at least two uncorrupted accepted instances &amp;lt;math&amp;gt;\Pi^S_i, \Pi^S_j&amp;lt;/math&amp;gt; possess the transcripts chain &amp;lt;math&amp;gt;TransChain_{\Pi^S_i}(l) \neq TransChain_{\Pi^S_j}(l)&amp;lt;/math&amp;gt; and they believe they have the &amp;lt;math&amp;gt;TransChain_{\Pi^S_i}(l) = TransChain_{Pi^S_j}(l) with non-negligible probability.&lt;br /&gt;
&lt;br /&gt;
For definition of &amp;lt;math&amp;gt;TransChain_{\Pi^S_i}(l)&amp;lt;/math&amp;gt; see Section [[''(n+1)sec''#Definitions_and_assumptions|VII.4.1]].&lt;br /&gt;
&lt;br /&gt;
= VII. Protocol High Level Design =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;T&amp;lt;/span&amp;gt;o achieve the security properties listed in [[#IV._Security_Properties|Section IV]], we break the protocol into the following sub-protocols:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;span&amp;gt;'''Deniable authenticated signature key and session key exchange'''&amp;lt;/span&amp;gt;, where participants deniably authenticate each other and agree on session key(s), while also exchanging ephemeral signing keys&lt;br /&gt;
# &amp;lt;span&amp;gt;'''Communication'''&amp;lt;/span&amp;gt;, where parties send authenticated confidential messages&lt;br /&gt;
# &amp;lt;span&amp;gt;'''Transcript consistency verification'''&amp;lt;/span&amp;gt;, where parties verify that all have received and seen an identical transcript in the same order, since the start of the chat session after receiving each messages.&lt;br /&gt;
&lt;br /&gt;
Our choice of sub-protocols for ''(n+1)sec'' followed suggestions made in [BGB04] and [GUVGC09], except where there has been a practical or security-related reason to deviate from those recommendations.&lt;br /&gt;
&lt;br /&gt;
In the following section we briefly describe our choice of the sub-protocols for each of the required tasks for a multi-party chat session.&lt;br /&gt;
&lt;br /&gt;
== '''VII.1 Design of Deniable Authenticated Signature Key Exchange'''==&lt;br /&gt;
&lt;br /&gt;
We have chosen our deniable signature key exchange protocol following the conclusions in [Gun13b] - by identifying a secure key exchange protocol that satisfies our needs. We then apply the triple Diffie-Hellman authenticated exchange to grant it properties of deniability [Ma13]. Subsequently, one can apply the same approach presented in [Gun13b] to communicate ephemeral signature keys during the key establishment process. However, for efficiency, we use the same ephemeral Diffie-Hellman private and public values used to deniably authenticate users and generate secret shares to produce ephemeral signatures.&lt;br /&gt;
&lt;br /&gt;
For the choice of the base authenticated key exchange protocol, we suggest a variant based on [ACMP10]. The rationale for the choice is laid out as follows:&lt;br /&gt;
&lt;br /&gt;
* The base design of the protocol in [ACMP10] is the same as the base for [BVS05] (recommended by [Gun13a]). However, the protocol presented in [ACMP10] is simpler.&lt;br /&gt;
* [ACMP10] offers a peer-to-peer key exchange with no extra rounds, if needed.&lt;br /&gt;
* [BVS05] and [ACMP10] are superior to the widely studied [BCPQ01] and its dynamic variation [BCP01] both in security and performance (&amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt; rounds).&lt;br /&gt;
* [BVS05] has been suggested by [Gun13b] for the reason described in [Gun13a]. We believe that the new deniable authentication approach, as it is similar to the SKEME protocol, satisfies the properties of deniability which [BVS05] considered crucial aside from the cooperating judge.&lt;br /&gt;
* Security analysis of [GBNM11] and [BCGNP08] has found that [BVS05] is provably secure against all attacks (including the insider attacks) that the papers consider.&lt;br /&gt;
* It is a two-round protocol and hence offers competitive efficiency considering the security property that it provides.&lt;br /&gt;
&amp;lt;!--* [BVS05] has existed for years and its various security aspects have been investigated by several researchers including [GBNM11] and [BCGNP08] which gives [BVS05] an advantage over newer algorithms.!--&amp;gt;&lt;br /&gt;
* [ACMP10] only needs one round of key re-agreement in the case of a participant leaving the chat, while [BVS05] enforces re-computation of Diffie-Hellman ephemeral keys and hence needs a minimum of two rounds plus overhead of re-authenticating the new ephemeral keys. This can significantly improve the efficiency of casual chat sessions where participants frequently enter and exit the chat.&lt;br /&gt;
* Although the Schnorr based algorithm suggested in [BVS05] satisfies a more comprehensible deniable model, triple Diffie-Hellman authenticated key exchange only needs two rounds of communication and can be done alongside the key agreement steps, while the Schnorr based algorithm of [BVS05] needs four rounds.&lt;br /&gt;
* Although key exchange algorithms based on the standard model are considered theoretically more secure than those based on the random oracle model, there has been no proposal for a 2-round protocol in the standard model that promises forward secrecy. Therefore, due to the importance of usability and efficiency in our approach, we opted to for a ROM based protocol such as described by [BVS05] and [ACMP10].&lt;br /&gt;
&lt;br /&gt;
===VII.1a Sharing a secret among the group===&lt;br /&gt;
All AGKE descriptions take the necessary steps to share a common secret confidentially among the group members along side  other operations such as authentication and insuring partnership. To insure forward secrecy these methods mostly rely upon a P2P Deffie-Hellman key exchange. Most AGKE descriptions rely on sharing an equation and solving a specific linear system described in [[''(n+1)sec''#GroupEnc and GroupDec Functions|IX.4]].&lt;br /&gt;
&lt;br /&gt;
We abstract this step as GroupEnc/GroupDec primitive, to allow for alternative designs which do not interact with the rest of the protocol and might offer other benefits. For example the &amp;quot;Naive peer-to-peer&amp;quot; primitive [[''(n+1)sec''#GroupEnc_and_GroupDec Functions|IX.4]] trades simplicity and generalizability (to a broadcast scheme c.f. [[''(n+1)sec''#VII.2 Other design possibilities|Section VII.2]]) for bandwidth consumption. &lt;br /&gt;
&lt;br /&gt;
== '''VII.3 Message Authentication''' ==&lt;br /&gt;
&lt;br /&gt;
As message authentication needs to be resistant to malicious insiders, following the outline of [GUVGC09], ''(n+1)sec'' signs each message using a public key signature scheme. The messages are signed with the ephemeral key of the sender. The authenticity of the origin can be verified by the public ephemeral key of the party distributed during the key exchange period.&lt;br /&gt;
&lt;br /&gt;
== '''VII.4 Transcript Ordering and Consistency''' ==&lt;br /&gt;
&lt;br /&gt;
Since each message sent by any one participant is signed by the ephemeral private key generated for that specific session, it is not possible for the internal or external adversary to forge a message on behalf of an uncorrupted participant.&lt;br /&gt;
&lt;br /&gt;
However, if the adversary is controlling the network structure, denial or delay of service is always possible. The consistency of the transcript (i.e. all participants see the same transcript in the same order) relies on the means of transport guaranteeing reliable delivery, with a single order, to every participant. In other words, we are verifying the ''reception'' of the message by the intended ''recipients''.&lt;br /&gt;
&lt;br /&gt;
By assuring transcript consistency, we also preventing &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; from sending different messages to &amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;U_k&amp;lt;/math&amp;gt; while they believe they are seeing the same conversation. In absence of transcript consistency, when a central server is managing the chatroom, this attack requires &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; to conspire with server, which is permeable in ''(n+1)sec'' threat model in accordance with the definition of transcript consistency in [GUVGC09].&lt;br /&gt;
&lt;br /&gt;
The protocol offered in this document examines the transcript for such consistency. In the case that the underlying transport fails to provide this level of consistency, clearly the consistency test will fail. In this sense, failure of consistency does not distinguish between malicious activities or the absence of a reliable transport.&lt;br /&gt;
&lt;br /&gt;
''(n+1)sec'' performs transcript authentication whenever a message is received. This is to guarantee consistency and protect the protocol against the transcript consistency attack. The procedure is similar to the procedure described in [GUVGC09], with two major differences:&lt;br /&gt;
&lt;br /&gt;
* We require additionally that message order be preserved for the following reasons:&lt;br /&gt;
&lt;br /&gt;
# XMPP, as the main protocol considered for this design, delivers messages to all clients in the same order.&lt;br /&gt;
# The ''(n+1)sec'' protocol detects if the adversary has manipulated the order of the messages rather than only dropping undesirable messages&lt;br /&gt;
# It is simpler to authenticate an ordered transcript compared to an unordered transcript.&lt;br /&gt;
&lt;br /&gt;
* We also require that each participant updates all other participants about their view of the session transcript every time they send a message, along with requiring heartbeat, this ensures that participants are aware whether or not they are all seeing the same transcript during the session.&lt;br /&gt;
&lt;br /&gt;
There are some cases where XMPP can fail our reliability assumption. In such cases, our consistency checks will fail. More advanced end-to-end recovery techniques are able to rescue such a scenario. We do not specify such techniques currently, though later versions of the protocol may rectify this.&lt;br /&gt;
&lt;br /&gt;
=== Definitions and assumptions ===&lt;br /&gt;
'''Transport assumption''':&lt;br /&gt;
We assume the central server reliably delivers messages to everyone, including the original sender, in the same order.&lt;br /&gt;
&lt;br /&gt;
'''Definition''' Each message ''M'' (sent after session S has been established) has an implicit server-sequence-number ''seqnum(M)'', a receive-parent: ''parent(M)'' (or recv-parent) the seqnum of last message the sender has received before sending ''M'' and a sender-sequence-number ''own-seqnum(M)''. We interchangeable use ''m'' when refering to both a message and its seqnum.&lt;br /&gt;
&lt;br /&gt;
Once a message ''M'' with seqnum ''m'' is received by instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; from the server (including participants own messages sent), a &amp;lt;math&amp;gt;TranscriptChain^S_i[m]&amp;lt;/math&amp;gt; may be calculated recursively as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;TrascriptChain^S_i[m] := (M, Hash(TranscriptChain^S_i[m - 1]))&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(we define TrascriptChain[0] = (sk^S_i, sid_i))&lt;br /&gt;
&lt;br /&gt;
A new message ''M'' contains ''p'' the seqnum of recv-parent of ''m'', &amp;lt;math&amp;gt;Hash(TranscriptChain^S_i[p])&amp;lt;/math&amp;gt;  and ''own-seqnum(M)''.&lt;br /&gt;
&lt;br /&gt;
* We say instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; has ''accepted'' message ''m'' if it has been received by &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;, then decrypted-verified.&lt;br /&gt;
&lt;br /&gt;
* We say instances &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt; have reached mutual consistency for message ''m'' if both accepted message ''m'' and have calculated the same hash of &amp;lt;math&amp;gt;TranscriptChain(m)&amp;lt;/math&amp;gt; and verified &amp;lt;math&amp;gt;H_j(TranscriptChain^S_i[m])) == H_i(TranscriptChain^S_i[m])&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* We say session ''S'' has reached consistency on message  ''m'', if all instances &amp;lt;math&amp;gt;\Pi^S_i, \Pi^S_j \in plist^S&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt; have reached mutual consistency.&lt;br /&gt;
&lt;br /&gt;
=== Server order ===&lt;br /&gt;
All clients see the same message order from the server.  All messages are sent to all users.  Aside from the presence messages (messages which indicate a user is joining or leaving a chatroom or if they have been inactive for a long time) sent by the server, messages are sent by users.&lt;br /&gt;
&lt;br /&gt;
All messages in a room have a unique sequence number (0, 1, ...).  We assume that the server is unaware of sequence numbers (e.g. XMPP MUC); clients must allocate them implicitly when receiving messages.&lt;br /&gt;
&lt;br /&gt;
= VIII. ''(n+1)sec'' Protocol: Step by Step =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;I&amp;lt;/span&amp;gt;n this section we present the ''(n+1)sec'' protocol in algorithmic format. All user IDs should be considered the modulo number of participants in the room.&lt;br /&gt;
&lt;br /&gt;
Deniable authentication is derived from the Triple Diffie-Hellman algorithm presented in [Sys14]. Joining the room is a variation of the two-round mBD+P protocol presented in [ACMP10] where the authentication step has been made deniable. Leaving the room is the one-round mBD+S from [ACMP10].&lt;br /&gt;
&lt;br /&gt;
==VIII.1 Schematic view of the key exchange==&lt;br /&gt;
&lt;br /&gt;
The protocol computes a unified session key for all participants. This imposes, in particular, the necessity that all &amp;lt;math&amp;gt;plist_i&amp;lt;/math&amp;gt;' is identical for all participants. However, as consistent view is part of ''(n+1)sec'' security model, it does not impose extra limitation on the protocol. For more information please see [[#Participatory_vs_individually_independent_computation_of_group_keys|Appendix B: Participatory vs individually independent computation of group keys]].&lt;br /&gt;
&lt;br /&gt;
For simplicity, group operation is written multiplicatively (even though it is actually an elliptic curve point operation traditionally represented by addition).&lt;br /&gt;
&lt;br /&gt;
Whenever our design deviates from [ACMP10], it is marked in {{Font color|black|yellow|yellow}}. We have abstracted out the steps mentioned in [ACMP10] as an independent primitive in {{Font color|black|pink|pink}}:&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 1'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Round&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Step&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate ephemeral DH private key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; x_i \leftarrow [0, order(g)]&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate DH key for BD, Triple DH and Signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;y_i \leftarrow g^{x_i}&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|3&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Broadcast User identity and the DH key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(U_i, y_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|4&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Compute Session Id&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sid_i \leftarrow (U_1|y_1|\dots|U_n|y_n)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-''(n+1)sec''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|5&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate Triple Diffie-Hellman P2P keys&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|yellow|&amp;lt;math&amp;gt;k_{i,j} \leftarrow H({y_j}^{LSK_{U_i}},LPK_{U_j}^{x_i},y_j^{x_i}) \; \forall j \neq i&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|6&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Generate key confirmations&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|yellow|&amp;lt;math&amp;gt;kc_i \leftarrow (H(k_{i,1}, U_1),\dots,H(k_{i,n}, U_n))&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|7&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate secret shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;z'_i \leftarrow (H(k_{i,j}, sid_i) for j \in \{1,\dots,n\})&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|8&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Encrypt shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|pink|&amp;lt;math&amp;gt;z_i \leftarrow GroupEnc(k_{i_j} for j \in \{1,\dots,n\}, z')&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|9&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Sign identity, shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;\sigma_i \leftarrow Sign_{x_i}(U_i, z_i, sid)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|10&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Broadcast encrypted shares and confirmation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(U_i, z_i, \sigma_i,&amp;lt;/math&amp;gt;{{Font color|black|yellow|&amp;lt;math&amp;gt;kc_i&amp;lt;/math&amp;gt;}}'')''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|11&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check validity of key confirmation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|yellow|&amp;lt;math&amp;gt;kc_k[j] \stackrel{?}{=} kc_j[k] \; \forall j \neq k&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|12&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check signatures&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;Verify_{y_i}(\sigma_j) \; \forall j \neq i&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|13&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check Session Ids&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sid_j \stackrel{?}{=} sid_i \; \forall j \neq i&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|14&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Generate session key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|{{Font color|black|pink|&amp;lt;math&amp;gt;sk_{i} \leftarrow H(GroupDec(k_{i,j}, z_j \; \forall j),sid_i, U_j) \; \forall j \neq i&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Triple Diffie-Hellman authentication===&lt;br /&gt;
''(n+1)sec'' uses a varient of Triple Diffie-Hellman (TDH) protocol also employed in Textsecure protocol [Mo13] to carry on mutual deniable authentication as well as peer-to-peer secret key exchange. It can be seen as a variation of [SoKi00] key exchange, however, unlike SoKi00], as it does not multiply all three DH secrets and therefore is not suspticble to attacks mentioned in [BoMa10].&lt;br /&gt;
&lt;br /&gt;
By using TDH secret both in p2p key as well as in key confirmation step, (n+1)sec both implicitly and explicitly authenticate the peers.&lt;br /&gt;
&lt;br /&gt;
In Algorithm 1, TDH and the original group key exchange from [ACMP10] has been combined to provide a deniable authenticated group key exchange. Here, we single out TDH Algorithm 1.1 for better presentation of the protocol for the reader.&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 1.1''' Triple Diffie-Hellman between &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Round&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Step&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 1&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|1&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate ephemeral DH private key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; x_i \leftarrow [0, order(g)]&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
|align=&amp;quot;right&amp;quot; | Generate ephemeral DH public key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;y_i \leftarrow g^{x_i}&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|3&lt;br /&gt;
|align=&amp;quot;right&amp;quot; | Broadcast User identity and the DH key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(U_i, y_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|2&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|4&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Receive other party id and ephemeral DH public key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(U_j|y_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-''(n+1)sec''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|5&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate Triple Diffie-Hellman P2P keys&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;k_{i,j} \leftarrow H({y_j}^{LSK_{U_i}},LPK_{U_j}^{x_i},y_j^{x_i}) \; \forall j \neq i&amp;lt;/math&amp;gt;}}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|6&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Send key confirmation to other party&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;kc_i \leftarrow H(k_{i,j}, U_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| -&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|7&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Receive and Check validity of key confirmation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;kc_j \stackrel{?}{=} H(k_{i,j}, U_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===''GroupEnc'' and ''GroupDec'' functions===&lt;br /&gt;
For the high level design of the protocol we do not specify the primitives for ''GroupEnc'' and ''GroupDec'' used in steps '''XX''' and '''XX''' as part of the protocol, as we do not specifies the Hash function and the block cipher. We explain their property here. We choose a candidate in section IX.4.&lt;br /&gt;
&lt;br /&gt;
The ''GroupEnc'' and ''GroupDec'' functions are primitives which are called collectively by all instances involved in the session and are supposed to satisfies the following goal:&lt;br /&gt;
&lt;br /&gt;
'''Definition''': Let &amp;lt;math&amp;gt;\mathcal{S} := \{U_1,...,U_n\}&amp;lt;/math&amp;gt; and for each &amp;lt;math&amp;gt;i,j&amp;lt;/math&amp;gt;, let &amp;lt;math&amp;gt;k_{i,j}&amp;lt;/math&amp;gt; be a secret shared between and only between &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;. The goal of group &amp;lt;math&amp;gt;\mathcal{S}&amp;lt;/math&amp;gt; is that:&lt;br /&gt;
&lt;br /&gt;
# Each member of group &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; to generate and share a secret &amp;lt;math&amp;gt;z'_i&amp;lt;/math&amp;gt; among the member of group ''G'' using public channel &amp;lt;math&amp;gt;\mathcal{C}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# &amp;lt;math&amp;gt;z'_i&amp;lt;/math&amp;gt;  remains unknown for any &amp;lt;math&amp;gt;\mathcal{A} \not \in G&amp;lt;/math&amp;gt; eavesdropping the channel &amp;lt;math&amp;gt;\mathcal{C}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 To this end each member &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; compute &amp;lt;math&amp;gt;z_i := GroupEnc(k_{i,j} for j \in \{1,...,n\}, z'_i)&amp;lt;/math&amp;gt;  and broadcast &amp;lt;math&amp;gt;z_i&amp;lt;/math&amp;gt; on &amp;lt;math&amp;gt;\mathcal{C}&amp;lt;/math&amp;gt;. Later on when &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; receives all &amp;lt;math&amp;gt;z_j&amp;lt;/math&amp;gt;. It recovers all secrets &amp;lt;math&amp;gt;z'_i&amp;lt;/math&amp;gt; by computing &amp;lt;math&amp;gt;GroupDec(k_{i,j} for j \in \{1,...,n\}, z'_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===(n+1)sec key exchange vs original Flexible Group Key Exchange of [ACMP10]===&lt;br /&gt;
Although in higher level view of (n+1)sec we generalized the process of key exchange using ''GroupEnc''/''GroupDec'' abstraction, at lower level our choice of primitive for this functions make the group key computation processes of ''(n+1)sec'' and the original key exchange algorithm the same. Hence, the steps marked pink in Algorithm 1, only differ in from [ACMP10] but not in result.&lt;br /&gt;
&lt;br /&gt;
(n+1)run a deniable mutual authentication protocol along side with the key exchange protocol, this results in communicating extra key confirmation data along side of other data exchanged during the course of running the protocol. As we will show in the proof, these data has effect on the usual run of the algorithm.&lt;br /&gt;
&lt;br /&gt;
The only step that ''(n+1)sec'' runs differently compare to the original algorithm (beside generating extra data), is computation of mutual secret, between &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt;. In original, algorithm it is simply &amp;lt;math&amp;gt;g^{x_i}{x_j}&amp;lt;/math&amp;gt;. In ''(n+1)sec'', it is the triple DH secret &amp;lt;math&amp;gt;H({y_j}^{LSK_{U_i}},LPK_{U_j}^{x_i},y_j^{x_i})&amp;lt;/math&amp;gt;. We will prove that this change does not compromise any of the protocol proprieties.&lt;br /&gt;
&lt;br /&gt;
The main difference between the two key exchange algorithms is in the key used for signature. In original algorithm, parties use their long term private key to sign their contribution, while in ''(n+1)sec'' they use their ephemeral keys. However, because the ephemeral keys has been authenticated before used for verification, we prove that the authenticity of signatures in both algorithms are equivalent under CDH assumption.&lt;br /&gt;
&lt;br /&gt;
==VIII.2 Chatroom Setup==&lt;br /&gt;
&lt;br /&gt;
In almost any practical case, participants join the chat sequentially. It is assumed that multiple participants cannot join simultaneously. For the sake of efficiency one can adjust the implementation to have a threshold time to wait and thus start a chat with more participants. However, this makes the implementation significantly more complicated without any evident efficiency benefit.&lt;br /&gt;
&lt;br /&gt;
Therefore, our assumption is that a secure chat is always set up when a participant starts the chat room. Additional participants would be added sequentially using Algorithm [[#VIII.3_Joining|VIII.3]], as they enter the chat. Algorithm [[#Chatroom_setup|1]] describes the chat room setup protocol.&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 2'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate ephemeral DH private key of the room initiator&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; x_i \leftarrow [0, order(g)]&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate DH key for BD, Triple DH and Signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;y_i \leftarrow g^{x_i}&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Set participant list&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;plist \leftarrow [U_i]&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== VIII.3 Join ===&lt;br /&gt;
&lt;br /&gt;
Joining a chat involves two different procedures: the Join procedure, described in Algorithm [[''(n+1)sec''#Join|2]], which runs on the new participant’s instance, and an Accept New Participant Procedure, described in Algorithm [[''(n+1)sec''#Protocol_for_other_participants_already_in_the_chat_to_accept_the_newcomer|3]], which runs on the clients of participants that are already in the chat.&lt;br /&gt;
&lt;br /&gt;
When a new participant &amp;lt;math&amp;gt;U_{n+1}&amp;lt;/math&amp;gt; joins the chat, current participants can still use their established authenticated ephemeral public key (to derive the &amp;lt;math&amp;gt;sessionKey_{new}&amp;lt;/math&amp;gt; and as their signature verification key). Confidentiality of &amp;lt;math&amp;gt;sessionKey_{old}&amp;lt;/math&amp;gt; is guarded against the new participant by Diffie-Hellman key shares hashed alongside the session id (which is dependent on the list of participants). The new participant cannot combine the old and new shares to recover &amp;lt;math&amp;gt;sessionKey_{old}&amp;lt;/math&amp;gt;. The fact that old participants do not need to compute new ephemeral keys (and re-verify their ephemeral identities) decreases the computational complexity of the protocol.&lt;br /&gt;
&lt;br /&gt;
The new participant needs to authenticate everybody already in the room and hand them their ephemeral key. All the parties already in the room only need to authenticate the new participant and need to send to them their ephemeral DH key. These procedures are described in Algorithm 3 and 4. After initial authentication step, all parties follow the same procedure to initiate a new session following Algorithm 5.&lt;br /&gt;
&lt;br /&gt;
====  Authentication Step for new Joining party====&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 3'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate ephemeral DH private key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; x_i \leftarrow [0, order(g)]&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate DH key for BD, Triple DH and Signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;y_i \leftarrow g^{x_i}&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Broadcast User identity and the DH key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(U_i, y_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Receive other users' id/key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;plist_i|klist_i \leftarrow (U_1|y_1|\dots|U_n|y_n)\cup(U_i,y_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate Triple Diffie-Hellman P2P keys&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;k_{i,j} \leftarrow H({y_j}^{LSK_{U_i}},LPK{U_j}^{x_i},y_j^{x_i})&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate key confirmations&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;kc_i \leftarrow (H(k_{i,1}, U_1),\dots,H(k_{i,n}, U_n))&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After this step joining user will proceed to &amp;quot;initiate new session&amp;quot; by Algorithm 5.&lt;br /&gt;
&lt;br /&gt;
====Authentication Step for parties in the room====&lt;br /&gt;
For other participants to a accept a new participant only, the authentication step is different. After current participants authenticate the new user, they proceed to update session.&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 4'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| broadcast all user's identities &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; (U_1|y_1|\dots|U_n|y_n) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Receive other users' id/key and update participant list&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(plist_i|klist_i) \cup (U_j|y_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate Triple Diffie-Hellman P2P key for the new participant&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;k_{i,j} \leftarrow H({y_j}^{LSK_{U_i}},LP_{U_j}^{x_i},y_j^{x_i})&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate key confirmations&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;kc_{i,j}\leftarrow H(k_{i,j}, U_i) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After this step users will proceed to &amp;quot;initiate new session&amp;quot; using Algorithm 5.&lt;br /&gt;
&lt;br /&gt;
==== Initiate new session ====&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 5'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Compute Session Id&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sid_i \leftarrow H(U_1|y_1|\dots|U_n|y_n)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Cancel any pending request for establishing a session with the same Id&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|AxeNewSessionRequestTimer&amp;lt;math&amp;gt;(sid_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Generate secret shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;z'_i \leftarrow (H(k_{i,j}, sid_i) for j \in \{1,\dots,n\})&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Encrypt shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;z_i \leftarrow GroupEnc(k_{i_j} for j \in \{1,\dots,n\}, z')&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Sign identity, shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;\sigma_i \leftarrow Sign_{x_i}(U_i, z_i, sid)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Broadcast key shares and confirmation (if any)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(U_i, z_i, \sigma_i, kc_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Receive other user(s)' key shares and confirmation of unauthenticated users or Time out&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Wait to Receive (&amp;lt;math&amp;gt;U_j|z_j,\sigma_1,kc_{ji}) &amp;lt;/math&amp;gt; for  &amp;lt;math&amp;gt; U_j&amp;lt;/math&amp;gt; unauthenticated or Timeout by(2&amp;lt;math&amp;gt;\times&amp;lt;/math&amp;gt;BROADCAST_LATENCY+INTERACTION_GRACE_INTERVAL, Drop inactive users, queue a new session request)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check validity of key confirmation of unauthenticated users&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;kc_i[j] \stackrel{?}{=} H(k_{j,i}, U_j)&amp;lt;/math&amp;gt;  for unauthenticated &amp;lt;math&amp;gt; U_j&amp;lt;/math&amp;gt; &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check signatures&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;Verify_{y_i}(\sigma_j)&amp;lt;/math&amp;gt; for  ''j'' in {1,...,''n''}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Check Session Ids&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sid_j \stackrel{?}{=} sid_i \; \forall j \neq i&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Generate session key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sk_{i} \leftarrow H(GroupDec(k_{i,j}, z_j \; \forall j),sid_i, U_j) \; \forall j \neq i&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Initiate the TranscriptChain&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;TrascriptChain^S_i[0] \leftarrow (sk^S_i, sid_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Initiate the last_sender_seq_num array&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;last\_sender\_seq\_num \leftarrow (0,...,0)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Initiate the own_seq_num to 0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;own\_seq\_num \leftarrow 0 &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Sending and receiving messages while joining is in progress ====&lt;br /&gt;
&lt;br /&gt;
In situations where a prolonged joining process (due to connection problems or malicious activities) has an adverse effect on the user experience, it might be desirable to enable that joining users can communicate with the parties in the room, while maintaining minimum assurances of authenticity, confidentiality, forward secrecy, as well as consistency only among participants.&lt;br /&gt;
&lt;br /&gt;
Consistency aspects of ''(n+1)sec'', both for the room view (''plist'') and for the transcript, are reached through group agreement. However, there are times when group agreement may be hard or impossible to reach either due to latency in a single participant's connection or due to a single participant broadcasting incorrect confirmation data (such as wrong ''plist'', ''sid'', key share, etc).&lt;br /&gt;
&lt;br /&gt;
We offer an extension to the ''(n+1)sec'' protocol to tackle this problem during the joining process. When a new participant joins the room, they send their DH key shares to the other participants. The other participants send their ephemeral key in return. They then send their key confirmation and key share. If this extension is to be considered, as soon as each user receives a key confirmation from another user, who is not currently part of the session, ''(n+1)sec'' displays a message highlighting the fact that although the user is not part of the session part of the conversation (from users' who confirmed the new user's identity) is being shared with them (through P2P encryption using the key derived from DH Key). The protocol, however, does not honour their input in the consistency check until a new session including the new user is set up. Each client can decide whether to disable this option.&lt;br /&gt;
&lt;br /&gt;
The user remains in the list of those not part of the current session, but receives the session messages until a new session is set up. Similarly, when a user receives a message from a user who is not part of the session, ''(n+1)sec'' will decrypt the message and display it with a disclaimer that the user is not yet part of the session and that some participants may not receive the same message.&lt;br /&gt;
&lt;br /&gt;
This is less secure model in which a room is a forwardly secure authenticated communication channel while a session is a subset of the room, which additionally offers a consistent view of the room and consistent messages among participants. The detail of the process is depicted in Secthoin VIII.5&lt;br /&gt;
&lt;br /&gt;
===VIII.4 Leave===&lt;br /&gt;
Leaving a chatroom involves a message from a leaving party indicating its intention to leave which, as with all other messages, contains the hash of TranscriptChain and one procedure for those who are staying in the chatroom (Procedure Farewell) which is described in Table [[''(n+1)sec''#Leave]]. &lt;br /&gt;
&lt;br /&gt;
====Farewell====&lt;br /&gt;
&lt;br /&gt;
Run by exiting user.&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 6'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Send farewell message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Send(&amp;quot;Leaving!&amp;quot;)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Wait to receive hashes of TranscriptChain or Timeout&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Wait to Receive() or Timeout by((2 &amp;lt;math&amp;gt;\times&amp;lt;/math&amp;gt;BROADCAST_LATENCY)+INTERACTION_GRACE_INTERVAL)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Receive&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Shrink====&lt;br /&gt;
&lt;br /&gt;
When the remaining participants receive the farewell message they need to reply with the Hash of TranscriptChain of the last message seen by the leaving user. They also need to re-run the one round key update algorithm. However, they only need a notice from the server that the user is leaving to initiate a subsession excluding the leaving user. &lt;br /&gt;
&lt;br /&gt;
Additionally, failure to receive a heartbeat from a user will result in executing Algorithm [[''(n+1)sec''#Shrink]] excluding users who did not update their key.&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 7'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Send Hash of TranscriptChain of last message seen by leaving user&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Send(&amp;lt;math&amp;gt;H(TranscriptChain^S_i[Parent(m_{farewell})])&amp;lt;/math&amp;gt;)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Remove leaving user's id/key and update participant list&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(plist_i|klist_i) \backslash (U_j|y_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Users will proceed to &amp;quot;initiate new session&amp;quot; steps.&lt;br /&gt;
&lt;br /&gt;
=== VIII.5 Secure Send and Receive ===&lt;br /&gt;
&lt;br /&gt;
After the session key is established, participants will use Algorithms [[''(n+1)sec''#Send|5]] and [[''(n+1)sec''#Receive|6]] to communicate securely.&lt;br /&gt;
&lt;br /&gt;
On Send, the protocol checks the status of the new ephemeral Diffie-Hellman and key share using messages it receives from participants. It (re)sends any missing pieces. It also informs other participants which part of the key share has been received by the participant. This information is needed in order to enforce in-session forward secrecy. The metadata flag indicates if the message being sent only contains meta data (e.g. heartbeat) or actual user communication.&lt;br /&gt;
&lt;br /&gt;
On Receive, the protocol updates who has seen which pieces of the key shares. The protocol also generates a new group key if the new key shares have been received from all participants. Those who have not updated their key shares eventually time out via their heartbeat interval.&lt;br /&gt;
&lt;br /&gt;
====VIII.5.1 (n+1)sec Message Structure====&lt;br /&gt;
&lt;br /&gt;
Every (n+1)sec message sent after establishment of a session has the following format:&lt;br /&gt;
&lt;br /&gt;
    np1sec:3Base64EnocodedMessage:3&lt;br /&gt;
&lt;br /&gt;
The Base64EncodedMessage is decoded as:&lt;br /&gt;
&lt;br /&gt;
    sid, Encrypted part of the message&lt;br /&gt;
&lt;br /&gt;
Encrypted message can be decrypted by the session key and has the following structure&lt;br /&gt;
&lt;br /&gt;
    Signed message, Signature corresponding to the signed message&lt;br /&gt;
&lt;br /&gt;
Signed Message consists of following parts&lt;br /&gt;
&lt;br /&gt;
    sid, sender ID, User message, meta message, hash of TranscriptChain of the message, naunce&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;session ID&amp;quot; and the &amp;quot;sender ID&amp;quot; are prepended in part to address concerns of [Da01]. The nuance is a random 128 bit value, appended to prevent any possibility of replay or brute force attack.&lt;br /&gt;
&lt;br /&gt;
User message is the plain text typed by user and handled to (n+1)sec by the chat client.&lt;br /&gt;
&lt;br /&gt;
meta message contains a message has the following format&lt;br /&gt;
&lt;br /&gt;
    meta_only  , ustate_1, ..., ustate_n, current_load&lt;br /&gt;
&lt;br /&gt;
If meta_only flag is true then User message is ignored and client is informed not display anything&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;ustate_i&amp;lt;/math&amp;gt; flag = {0: sender has no key update from &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt;, 1: sender has received a new ephemeral key from &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt;, 2: user has received secret share from &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
    current_load = (load_flag, load)&lt;br /&gt;
&lt;br /&gt;
    load_flag = 0 no load&lt;br /&gt;
    load_flag = 1 load contains new ephemeral public key from sender&lt;br /&gt;
    load_flag = 2 load contains new secret share from the sender&lt;br /&gt;
&lt;br /&gt;
The message also include &amp;quot;hash of TranscriptChain&amp;quot; of parent of the message as &amp;quot;additional authenticated data&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(TransciptChain[parent(m)])&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that we send the entry in the chain indexed by &amp;lt;math&amp;gt;parent(m)&amp;lt;/math&amp;gt; rather than &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. This is because a hash may only be calculated once the subject is actually received back from the server (i.e. gets a sequence number). This differs from some other concepts of &amp;quot;message ID&amp;quot; that may be calculated locally.&lt;br /&gt;
&lt;br /&gt;
====(n+1)sec P2P Message Structure====&lt;br /&gt;
&lt;br /&gt;
Every (n+1)sec message sent after establishment of a session has the following format:&lt;br /&gt;
&lt;br /&gt;
    np1sec:3Base64EnocodedMessage:3&lt;br /&gt;
&lt;br /&gt;
The Base64EncodedMessage is decoded as:&lt;br /&gt;
&lt;br /&gt;
    keyid, Encrypted part of the message&lt;br /&gt;
&lt;br /&gt;
Encrypted message can be decrypted by the session key and has the following structure&lt;br /&gt;
&lt;br /&gt;
    Signed message, Signature corresponding to the signed message&lt;br /&gt;
&lt;br /&gt;
Signed Message consists of following parts&lt;br /&gt;
&lt;br /&gt;
    keyid, sender ID, User message, naunce&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Key ID&amp;quot; and the &amp;quot;sender ID&amp;quot; are prepended in part to address concerns of [Da02]. The nuance is a random 128 bit value, appended to prevent any possibility of replay or brute force attack.&lt;br /&gt;
&lt;br /&gt;
User message is the plain text typed by user and handled to (n+1)sec by the chat client.&lt;br /&gt;
&lt;br /&gt;
====Send====&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 8'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; | prepend session id and sender id&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (sid, U_i, m) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Generate new DH Key or new secret share if needed and append&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (m,s) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Increment own sequence number&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; own\_seq\_num \leftarrow own\_seq\_num+1 &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Append the hash of the TranscriptChain, up to the parent of the message being sent&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow &amp;lt;/math&amp;gt; (''m'', &amp;lt;math&amp;gt;H(H(parent(m)), H(TransciptChain^S_i[parent(m)-1]))&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;parent\_id(m)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;own\_seq\_num&amp;lt;/math&amp;gt;)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Generate a random  nuance and append to the message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (m, rand(128bit)) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Sign the message and append the signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (m, Sign_{x_i}(m))&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Encrypt&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;e \leftarrow Enc_{k_{sid}}(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Broadcast the message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(sid_i, e)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Reset Heartbeat timeout timer&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|ResetHeartbeatTimer()&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Set ACK timeout timer if the message has user content&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;meta\_only \stackrel{?}=&amp;lt;/math&amp;gt; False then ResetHeartbeatTimer()&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Receive====&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 9'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Decrypt message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; sid_{rec}, sender\_id, m, s, h, parent\_id, sender\_seq\_num, sigma  \leftarrow Dec_k(m) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Check signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; Verify_{sender\_id}(m,\sigma) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Compute message sequence number&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; seqnum(m) \leftarrow &amp;lt;/math&amp;gt; ComputeSeqNum(''m'')&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Verify session id and transcript consistency and sender sequence number, issue a warning in case of failure&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; sid_i \stackrel{?}{=} sid_{rec} \; &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt; \; h \stackrel{?}{=} H(H(parent(m)), H(TranscriptChain^S_i[parent(m)-1])) &amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt; sender\_seq\_num \stackrel{?}{&amp;gt;} last\_own\_seq\_nums[sender\_id] &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Update TranscriptChain if possible&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; TranscriptChain^S_i[seqnum(m)] = (H(m), H(TranscriptChain^S_i[seqnum(m)-1])) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Update sender sequence number record&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;last\_own\_seq\_nums[sender\_id] \leftarrow sender\_seq\_num &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Update sender's ephemeral key or share secret&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;y_j \leftarrow s \; \textrm {  or  } \; z_{j} \leftarrow s&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| If all users' share are received, generate session key&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sk_{i} \leftarrow H(GroupDec(k_{i,j}, z_j \; \forall j),sid_i, U_j) \; \forall j \neq i&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Update ack timeout timer&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|AxeAckTimeoutTimer&amp;lt;math&amp;gt;(parent(m),sender_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Update rekey timeout timer&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| ResetRekeyTimeOut(&amp;lt;math&amp;gt;sender_i&amp;lt;/math&amp;gt;)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| If the message has content set up ACK timer&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;meta\_only \stackrel{?}= True&amp;lt;/math&amp;gt; then &amp;lt;math&amp;gt;SetACKTimer(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| return m&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If &amp;lt;math&amp;gt;meta\_only \stackrel{?}{=} False&amp;lt;/math&amp;gt; then return ''m''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Out of Session Send and Receive ====&lt;br /&gt;
Due to nature of the key exchange algorithm, (n+1)sec support confidential P2P communication. This in particular enables the user to share the conversation with joining user(s) who confirmed their identity to the user but have not established a session yet. It is worth mentioning that every session keeps a ''list future sessions to transition to'' this is equivalent to the list of ''confirmed but yet to join users''. If the extension discussed in section VIII.3 is enabled it will make use of this list to implement  the following changes:&lt;br /&gt;
* When a user send a message ''Extended Send'' is invoked instead, it sends the message to the session using ''Send'' but also to the prospective participants, using ''P2P Send''.&lt;br /&gt;
* When a message is received, ''Extended Receive'' is called which check if the user has the correct key to decrypt the message. If the message is encrypted by session key and user has the session key then it calls the normal receive. If the message is encrypted by a p2p key that the user share, it calls ''P2P Receive''. Otherwise, it simply ignores the message.&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 9.1 Extended Send'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; | If we are part of a session id in the room call ''Send''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| Send&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| For all confirmed users not in session call ''P2P Send''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| P2P Send&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 9.2 Extended Receive'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; | If ''m'' has session id call ''Receive''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| if ''m'' has ''sid'' then Receive&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| If ''m'' has key id, call ''P2P Receive''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| P2P Send&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 9.3 P2P Send'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; | Prepend key id and sender id&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (key\_id, U_i, m) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot; |Generate a random  nuance and append to the message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (m, rand(128bit)) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Sign the message and append the signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow (m, Sign_{x_i}(m))&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|Encrypt&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;e \leftarrow Enc_{k_{key\_id}}(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Broadcast the message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;(key\_id, e)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Broadcast&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 9.4 P2P Receive'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Decrypt message&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; key_{id}, sender\_id, m, sigma \leftarrow Dec_{k_{key\_id}}(m) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Check signature&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; Verify_{sender\_id}(m,\sigma) &amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| return m&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|return ''m''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===VIII.6 Reaching Consistency ===&lt;br /&gt;
&lt;br /&gt;
The protocol provisions two procedures to reach consistency in different cases: (a) reaching consistency for arbitrary messages during the course of a conversation, and (b) reaching consistency when an instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; leaves. Case (b) may be viewed as a special instance of case (a) plus the additional premise that  &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; must reach consistency as soon as possible (because they want to leave), and that they don't care about reaching consistency for any subsequent messages that they might receive after their final &amp;quot;farewell&amp;quot; message.&lt;br /&gt;
&lt;br /&gt;
Reaching consistency for arbitrary messages during the course of a conversation:&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 10'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Receive ''m'' with parent ''p'' from &amp;lt;math&amp;gt;\Pi^S_j&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; m \leftarrow seqnum(M), p \leftarrow parentnum(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Compare hash of TranscriptChain_j[p] with own value of it, issue a warning if it fails.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;H(TranscriptChain^S_j[p]) \stackrel{?}{=} H(TranscriptChain^S_i[p])&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Compute TranscriptChain^S_i[m] &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;plist \leftarrow [U_i]&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Case '''(b)''': when an instance &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; wants to part, they send a &amp;quot;farewell&amp;quot; message ''m'' which contains &amp;lt;math&amp;gt;Hash(TranscriptChain^S_i[p])&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Everyone should include &amp;lt;math&amp;gt;Hash(TranscriptChain_j[p])&amp;lt;/math&amp;gt; in their re-key message&lt;br /&gt;
* When ''&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt;'' reaches mutual consistency for p may leave or otherwise (if received hashes and their owns are non-matching)  shows a warning.&lt;br /&gt;
** &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; won't have a chance to reach consistency for the messages receives after ''p''&lt;br /&gt;
&lt;br /&gt;
===VIII.7 In-session Forward Secrecy===&lt;br /&gt;
To ensure forward secrecy in long living chat sessions, ''(n+1)sec'' provides a session key update throughout the session. Each message sent to the session by each participant contains meta data described in [[#VIII.5.1 (n+1)sec Message Structure]]. Prior to sending any message, ''(n+1)sec'' determines the content of meta data, and piggy backs to that message according to the following algorithm:&lt;br /&gt;
&lt;br /&gt;
'''Algorithm 10.1 Compute meta data'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Initiate meta data with current state of knowledge of new ephemeral keys and secret shares&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; meta\_data \leftarrow ustate_i[j]&amp;lt;/math&amp;gt; for all  ''j'' in {1,...''n}&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Include the new ephemeral key if participant &amp;lt;math&amp;gt;U_j&amp;lt;/math&amp;gt; has not receive it&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If &amp;lt;math&amp;gt;ustate_i[j] \stackrel{?}{=} 0&amp;lt;/math&amp;gt; ''meta_data'' \leftarrow &amp;lt;math&amp;gt;y_{i_{new}}&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| If (all) participants have sent their ephemeral keys compute the shared secret&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If &amp;lt;math&amp;gt;ustate_{j}[i] \stackrel{?}{=} 1&amp;lt;/math&amp;gt; for all  ''j''&lt;br /&gt;
in {1,...''n}, then &amp;lt;math&amp;gt; meta\_data \leftarrow (meta\_data, GroupEnc(k_{i_j} for j \in \{1,\dots,n\}, z'))&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Return meta data&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|return ''meta_data''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===VIII.8 Heartbeat and Timeout ===&lt;br /&gt;
&lt;br /&gt;
Heartbeat is an empty message which contains only meta data. The meta data consists of information used to compute a new key and the most updated hash of transcript chain.&lt;br /&gt;
&lt;br /&gt;
The protocol sends a heart beat only if the user has not sent any messages for a specific period of time.&lt;br /&gt;
&lt;br /&gt;
The heartbeat is necessary to ensure three properties:&lt;br /&gt;
&lt;br /&gt;
- Periodic transcript consistency check.&lt;br /&gt;
- In session forward secrecy.&lt;br /&gt;
- Freshness&lt;br /&gt;
&lt;br /&gt;
To achieve these goals three time out periods are defined when heart beat sending is required. Additionally, we define an interval to model the latency in the underlying transport. These should be defined to cover common cases (e.g. 95th-percentile):&lt;br /&gt;
&lt;br /&gt;
* ACK_GRACE_INTERVAL: When &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; a receives a non-empty message it needs to inform the group about the transcript update no later than ACK_GRACE_INTERVAL time. Therefore if &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; f &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; does not send a message ACK_GRACE_INTERVAL seconds after receiving a non empty message,&amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; will send a heartbeat.&lt;br /&gt;
&lt;br /&gt;
* REKEY_GRACE_INTERVAL, to ensure in session forward secrecy, the protocol requires that each &amp;lt;math&amp;gt;U_i&amp;lt;/math&amp;gt; updates their DH ephemeral key as well as group key. After a session is established or it was rekeyed, each &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; needs to send its new DH ephemeral key no later than REKEY_GRACE_INTERVAL. Therefore if &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; has not sent any message by that&lt;br /&gt;
period of time, it issues an empty message. Similarly after receiving all ephemeral keys from all participants, &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; needs to send its secret for computation of new key no later than REKEY_GRACE_INTERVAL.&lt;br /&gt;
&lt;br /&gt;
* INTERACTION_GRACE_INTERVAL, to ensure establishment of a session in timely manner, when immediate contribution of participants is required (for example sending key confirmation, contribution to the session secret), this values indicate that how long an active participants should wait till it decide to drop the non-contributing inactive participants from the participant list.&lt;br /&gt;
&lt;br /&gt;
* BROADCAST_LATENCY: Modelling the amount of time which a message takes to reach the server and broadcast to the other clients. It should be based on the transport considered.&lt;br /&gt;
&lt;br /&gt;
==== Failure to heartbeat and inactivity timers ====&lt;br /&gt;
&lt;br /&gt;
Whenever, a message ''m'' is received a timer of (2*BROADCAST_LATENCY)+ACK_GRACE_INTERVAL) period is set. If the &amp;lt;math&amp;gt;H(Transcript_j[m'])&amp;lt;/math&amp;gt; for a &amp;lt;math&amp;gt;m' \ge m&amp;lt;/math&amp;gt; is received from all participants, the timer is cancelled. Otherwise at the time out, the protocol issues a local UI warning and cancel the warning if/when such a hash is received and is consistence among participants.&lt;br /&gt;
&lt;br /&gt;
When a new session key is computed as well as when &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; receives new ephemeral DH values from all users, a timer of (2*BROADCAST_LATENCY)+REKEY_GRACE_INTERVAL period is set. It is cancelled when all user contributions are received (ephemeral keys or session key secrets). Otherwise, the &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; excludes users who failed to contribute from the &amp;lt;math&amp;gt;plist&amp;lt;/math&amp;gt; exclude those users from the plist and call '''initiate new session'''. This measure is taken to ensure that users do not block in-session forward secrecy due to loss of connection or being under attack.&lt;br /&gt;
&lt;br /&gt;
==== Timing out during an interactive session ====&lt;br /&gt;
&lt;br /&gt;
''(n+1)sec'' by design assumes the participants are trusted in being commited to the goal fo creating a secure chatroom. In this sense, ''(n+1)sec'' provide little defens against party which trying to sabotage a room by mounting various denial of service approaches. However, there are situation where a party is genuinely affected (by external adversary) or by connection problem. Under such assumption, situations we expect that all other parties, reach a consensus, that a participant has connectivity problem and agree on leave them out of the room.&lt;br /&gt;
&lt;br /&gt;
Timeout sub protocol is designed to deal with such a situation. When a new session is requested (for join, leave, etc) each participant wait for (2*BROADCAST_LATENCY)+INTERACTION_GRACE_INTERVAL, they omit non-participating participants from the plist, and wait for PLIST_UPDATE_GRACE_INTERVAL.  so other participants also reach to the same conclusion and updates their plists, then they initiate a new session.&lt;br /&gt;
&lt;br /&gt;
==== Drop inactive users, queue a new session request ====&lt;br /&gt;
'''Algorithm 10.XX'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
!align=&amp;quot;right&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Pseudo-code&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Type&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Drop inactive users&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt; plist_i \leftarrow plist_i \backslash inactive\_participant\_list&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Recompute Session Id&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;math&amp;gt;sid_i \leftarrow H(U_1|y_1|\dots|U_{n_{active}}|y_{n_{active}})&amp;lt;/math&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| Set up timer to request a new session&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|SetTimer(PLIST_UPDATE_GRACE_INTERVAL, initiate new session)&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Computation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When a participant receives a request for initiating new session, it checks their most current view of participant list (the one with eliminated timed out users) and if it matched then they go ahead with initiating the session, otherwise decline halt the request.&lt;br /&gt;
&lt;br /&gt;
= '''IX Cryptographic Primitives''' =&lt;br /&gt;
&lt;br /&gt;
==IX.1 Hash Function==&lt;br /&gt;
SHA256 is being used as the hash function and the random oracle. SHA256 provides a sufficiently secure hash primitive for the level of security provided by ''(n+1)sec'' and is widely implemented.&lt;br /&gt;
&lt;br /&gt;
==IX.2 Message Origin Authentication ==&lt;br /&gt;
ED25519 has been chosen as the signature primitive due to its efficiency and more secure implementability over other elliptic-curve digital signature algorithms. [Be11]&lt;br /&gt;
&lt;br /&gt;
==IX.3 Message Encryption ==&lt;br /&gt;
We are using AES-256 in Galois/Counter Mode (GCM) with a shared group key for message encryption, we are following the suggestion by the original OTR protocol of using counter mode. However, unlike OTR, &amp;lt;math&amp;gt;(n+1)sec&amp;lt;/math&amp;gt; does not support per message forgeability (although the whole transcript is forgeable), it is not prohibitive to use the same key for encryption and authentication.&lt;br /&gt;
&lt;br /&gt;
The added authentication, spares P@P send and receive routines from using digital signature.&lt;br /&gt;
&lt;br /&gt;
With GCM mode, the authenticated encryption is generically secure by the result (and assumptions) of [Kr00].&lt;br /&gt;
&lt;br /&gt;
==IX.4 GroupEnc and GroupDec Functions ==&lt;br /&gt;
The ''GroupEnc'' and ''GroupDec'' functions defined in Section VIII.1, facilitate the collective generation of a secret(s) shared by the group. Here we mention two examples of such functions, and specify the functions for ''(n+1)sec' protocol:&lt;br /&gt;
&lt;br /&gt;
* '''Naive peer-to-peer GroupEnc/Dec''':&lt;br /&gt;
The simplest path to design such primitives is to encrypt &amp;lt;math&amp;gt;z'_i&amp;lt;/math&amp;gt; using the p2p encryption secret between each pair of participants:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;GroupEnc((k_{i,1},...,k_{i,n}),z'_i) := (E_{k_{i,1}}(z'_i),...,E_{k_{i,n}}(z'_i))&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;GroupDec((k_{i,1},...,k_{i,n}),(z_1,...,z_n)) := (D_{k_{i,1}}(z_1[i]),...,D_{k_{i,n}}(z_n[i]))&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Linear System based GroupEnc/Dec''':&lt;br /&gt;
&lt;br /&gt;
Another possibility is that each user generates k linear equations of l variables such if the system of &amp;lt;math&amp;gt;k.n&amp;lt;/math&amp;gt; equations has m independent equations then m &amp;lt; l. The remaining equations should be generated using the mutual secrets &amp;lt;math&amp;gt;k_{i,j}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
An example of such a system is used by [BuDe95]. In which &amp;lt;math&amp;gt;k = 1, l = n+1, m = n&amp;lt;/math&amp;gt; as follows:&lt;br /&gt;
&lt;br /&gt;
Each user U_i generate equations (k_{i,i-1}+k_{i,i+1}=a_i) so the system for n equation &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; variable will be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\matrix{ x_1 + x_2 = a_1 \\&lt;br /&gt;
          x_2+x_3= a_2 \\&lt;br /&gt;
          \vdots \\&lt;br /&gt;
          x_n + x_{n-1} = a_n \\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then each participant adds the equation of &amp;lt;math&amp;gt;x_i = k_{i,i+1}&amp;lt;/math&amp;gt; to the system and solves the derived system of &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt;-equation &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt;-unknown to recover the secrets.&lt;br /&gt;
&lt;br /&gt;
in such a system:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z'_i := k_{i,i-1} = k{i-1,i}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;GroupEnc((k_{i,1},...,k_{i,n}),z'_i, z'_{i+1}) := z'_{i} \oplus z'_{i+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
''(n+1)sec'' uses the modification of the primitive suggested in [ACMP10] to guard the confidentiality of the p2p and the subgroup keys:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
z'_i := H(k_{i,i-1}, sid_i)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While the naive peer to peer primitive is easier to understand and analyse, the second system gives the flexibility for the implementor to decide the trade off between the amount of data (number of equations) vs. the redundancy in the system (if some equations are not delivered the user can still compute a subset of secrets).&lt;br /&gt;
&lt;br /&gt;
= X. Next Steps =&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:200%&amp;quot;&amp;gt;T&amp;lt;/span&amp;gt;his document is the first public draft of the ''(n+1)sec'' protocol. We are genuinely hoping to receive a lot of feedback and review on this work and have chosen the wiki format to support [[Talk:Nsec|Discussion]]. Ongoing tasks for the team include mathematical proofs of resistance to the adversarial model presented herein as well as technical implementation details. This is currently scheduled for the end of December, 2014. The [https://github.com/equalitie/np1sec np1sec] software library will be initially implemented in [https://github.com/cryptocat/cryptocat/ Cryptocat] and (with your help) further developed to suit a variety of use-cases in the near future.&lt;br /&gt;
&lt;br /&gt;
= XI. Acknowledgements =&lt;br /&gt;
The eQualit.ie team would like to give special thanks and note to the effort and dedication offered by Trevor Perrin and Ximin Luo to this project. They have been actively involved throughout the year and the result would not have been the same without their contribution. The team would also like to express thanks to Joseph Bonneau for his constructive comment and critisim to improve the protocol and its presentation. George Kadianakis for helping with the security proof and pointing out flaws and attack; Arlo Breault for his work on implementation of the protocol in the [https://github.com/equalitie/np1sec np1sec] software library; David Goulet for valuable advice as well as continued assistance and support offered to the project; Prof. Payman Mohassel for his help and advice on the security model and the proof; Prof. Jermey Clark, Prof. Matthew Green and Frederic Jacobs for their constructive participation in the design debates; Prof. Mark Manulis for suggesting the GKA. eQualit.ie expresses gratitude to Nadim Kobeissi, Cryptocat founder and developer who initiated the project and for sharing his experience and giving advice on secure browser based chat. Last but not least we would like to thank the Open Technology Fund for supporting the project.&lt;br /&gt;
&lt;br /&gt;
= XII. References =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;references&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;HarvardReferences&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[*ACMP10] Michel Abdalla, Céline Chevalier, Mark Manulis, and David Pointcheval. “Flexible Group Key Exchange with on-Demand Computation of Subgroup Keys.” In ''Third African International Conference on Cryptology (AfricaCrypt ’10)'', edited by Dan Bernstein and Tanja Lange, 6055:351–368. LNCS. Stellenbosch, South Africa, 2010: Springer. &lt;br /&gt;
&lt;br /&gt;
[*Be11] Bernstein, Daniel J.; Duif, Niels; Lange, Tanja; Schwabe, Peter; Yang, Bo-Yin. &amp;quot;High-Speed High-Security Signatures.&amp;quot;,&amp;quot;CHES&amp;quot;,&amp;quot;978-3-642-23950-2&amp;quot;,&amp;quot;http://dblp.uni-trier.de/db/conf/ches/ches2011.html#BernsteinDLSY11&amp;quot;. 2011. pages: 124-142&amp;quot;,&amp;quot;6917&amp;quot;,&amp;quot;Lecture Notes in Computer Science&amp;quot;,&amp;quot;Springer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[*BS07] Bohli, Jens-Matthias, and Rainer Steinwandt. 2007. “Deniable Group Key Agreement.” In ''VIETCRYPT'', edited by Phong Q. Nguyen, 4341:298–311. Lecture Notes in Computer Science. Springer. http://dblp.uni-trier.de/db/conf/vietcrypt/vietcrypt2006.html#BohliS06.&lt;br /&gt;
&lt;br /&gt;
[*BVS05] Bohli, Jens-Matthias, Maria Isabel Gonzalez Vasco, and Rainer Steinwandt. 2005. “Secure Group Key Establishment Revisited.” ''IACR Cryptology ePrint Archive'' 2005: 395. http://dblp.uni-trier.de/db/journals/iacr/iacr2005.html#BohliVS05a.&lt;br /&gt;
&lt;br /&gt;
[*BM] Bonneau, Joseph, and Andrew Morrison. “Finite-State Security Analysis of OTR Version 2.” http://www.jbonneau.com/doc/BM06-OTR_v2_analysis.pdf&lt;br /&gt;
&lt;br /&gt;
[*BGB04] Borisov, Nikita, Ian Goldberg, and Eric Brewer. 2004. “Off-the-Record Communication, or, Why Not to Use PGP.” In ''Proceedings of the 2004 ACM Workshop on Privacy in the Electronic Society'', 77–84. WPES ’04. New York, NY, USA&lt;br /&gt;
&lt;br /&gt;
[*BCGNP08] Colin Boyd, Yvonne Cliff, Juan Gonzalez Nieto, and &amp;lt;span&amp;gt;KennethG.&amp;lt;/span&amp;gt; Paterson. 2008. “Efficient One-Round Key Exchange in the Standard Model.” In ''Information Security and Privacy'', edited by Yi Mu, Willy Susilo, and Jennifer Seberry, 5107:69–83. Lecture Notes in Computer Science. Springer Berlin Heidelberg.&lt;br /&gt;
&lt;br /&gt;
[*BoMa10] Boyd, Colin; Mathuria, Anish. &amp;quot;Protocols for Authentication and Key Establishment&amp;quot;,&amp;quot;3642077161, 9783642077166&amp;quot;,2010, Springer Publishing Company, Incorporated, 1st edition&lt;br /&gt;
&lt;br /&gt;
[*BCP01] Emmanuel Bresson, Olivier Chevassut, and David Pointcheval. 2001. “Provably Authenticated Group Diffie-Hellman Key Exchange - the Dynamic Case.” In ''Advances in Cryptology - Proceedings of ASIACRYPT ’01'', edited by Colin Boyd, 2248:290–309. LNCS. Gold Coast, Australia: Springer. &lt;br /&gt;
&lt;br /&gt;
[*BCPQ01] Emmanuel Bresson, Olivier Chevassut, David Pointcheval, and Jean-Jacques Quisquater. 2001. “Provably Authenticated Group Diffie-Hellman Key Exchange.” In ''Proceedings of the 8th ACM Conference on Computer and Communications Security (CCS ’01)'', edited by Mike Reiter, 255–264. Philadelphia, Pennsylvania.&lt;br /&gt;
&lt;br /&gt;
[*CaKr01] Ran Canetti, Hugo Krawczyk. 2001. “Analysis of Key-Exchange Protocols and Their Use for Building Secure Channels” “EUROCRYPT Conference. Lecture Notes in Computer Science”. Edited by Birgit Pfitzmann. &lt;br /&gt;
&lt;br /&gt;
[*Da14] George Danezis, Should Group Key Agreement be Symmetric and Contributory, http://conspicuouschatter.wordpress.com/2014/06/28/should-group-key-agreement-be-symmetric-and-contributory/&lt;br /&gt;
&lt;br /&gt;
[*Da02] Davis, Don,&amp;quot;Defective Sign &amp;amp; Encrypt in S/MIME, PKCS#7, MOSS, PEM, PGP, and XML.&amp;quot;,&amp;quot;USENIX Annual Technical Conference, General Track&amp;quot;,&amp;quot;1-880446-09-X&amp;quot;,&amp;quot;http://dblp.uni-trier.de/db/conf/usenix/usenix2001g.html#Davis01&amp;quot;,&amp;quot;2002-09-022001&amp;quot;, page 65-78&lt;br /&gt;
&lt;br /&gt;
[*GUVGC09] Ian Goldberg, Berkant Ustao&amp;lt;span&amp;gt;\&amp;lt;/span&amp;gt;uglu, Matthew D. Van Gundy, and Hao Chen. 2009. “Multi-Party Off-the-Record Messaging.” In ''Proceedings of the 16th ACM Conference on Computer and Communications Security'', 358–368. CCS ’09. New York, NY, USA: ACM. &lt;br /&gt;
&lt;br /&gt;
[*GBN10] M. Choudary Gorantla, Colin Boyd, and Juan Manuel González Nieto. 2010. ''One Round Group Key Exchange with Forward Security in the Standard Model''. http://eprint.iacr.org/2010/083.pdf&lt;br /&gt;
&lt;br /&gt;
[*GBNM11] M. Choudary Gorantla, Colin Boyd, Juan Manuel González Nieto, and Mark Manulis. 2011. “Modeling Key Compromise Impersonation Attacks on Group Key Exchange Protocols.” 'ACM Trans. Inf. Syst. Secur.&lt;br /&gt;
&lt;br /&gt;
[*Gun13a]  Matthew Van Gundy. April 2013. “[OTR-dev] Improved Deniable Signature Key Exchange for mpOTR.” &lt;br /&gt;
http://matt.singlethink.net/projects/mpotr/improved-dske.pdf&lt;br /&gt;
&lt;br /&gt;
[*Gun13b]  Matthew Van Gundy March 2013. “[OTR-dev] Improved Deniable Signature Key Exchange for mpOTR.”&lt;br /&gt;
http://lists.cypherpunks.ca/pipermail/otr-dev/2013-March/001676.html.&lt;br /&gt;
&lt;br /&gt;
[*Kr00], &amp;quot;Krawczyk, Hugo&amp;quot;,&amp;quot;The order of encryption and authentication for protecting communications (Or: how secure is SSL?), 2001, Published: Cryptology ePrint Archive, Report 2001/045 http://eprint.iacr.org/&lt;br /&gt;
&lt;br /&gt;
[*KPW13] Hugo Krawczyk and Kenneth G. Paterson, Hoeteck Wee. 2013. “On the Security of the TLS Protocol: A Systematic Analysis” in&lt;br /&gt;
''IACR Cryptology ePrint Archive''.&lt;br /&gt;
&lt;br /&gt;
[*LVH13] Liu, Hong; Vasserman, Eugene Y.; Hopper, Nicholas. &amp;quot;Improved Group Off-the-record Messaging&amp;quot; from the ''Proceedings of the 12th ACM Workshop on Workshop on Privacy in the Electronic Society'', 978-1-4503-2485-4, 'ACM', New York, NY, USA.  2013&lt;br /&gt;
&lt;br /&gt;
[*Mo13] Marlinspike, Moxie,&amp;quot;Simplifying OTR deniability&amp;quot; blogpost, Open Whispersystems, https://whispersystems.org/blog/simplifying-otr-deniability/&lt;br /&gt;
&lt;br /&gt;
[*Sys14] Marlinspike, Moxie et al. Whisper Systems. 2014. “TextSecure ProtocolV2.” Accessed March 2. https://github.com/WhisperSystems/TextSecure/wiki/ProtocolV2.&lt;br /&gt;
&lt;br /&gt;
[*RGK05] Mario Di Raimondo, Rosario Gennaro, and Hugo Krawczyk. 2005. “Secure Off-the-Record Messaging.” In ''WPES'', 81–89. Alexandria, VA, USA. http://dl.acm.org/citation.cfm?doid=1102199.1102216&lt;br /&gt;
&lt;br /&gt;
[*KiSo00] Song, Boyeon; Kim, Kwangjo, &amp;quot;Two-Pass Authenticated Key Agreement Protocol with Key Confirmation&amp;quot;,&amp;quot;Progress in Cryptology —INDOCRYPT 2000&amp;quot;,&amp;quot;978-3-540-41452-0&amp;quot;,&amp;quot;http://dx.doi.org/10.1007/3-540-44495-5_21&amp;quot;,&amp;quot;2000&amp;quot;; &amp;quot;237-249&amp;quot;,1977 &amp;quot;Lecture Notes in Computer Science&amp;quot;,Springer Berlin Heidelber.&lt;br /&gt;
&lt;br /&gt;
[*Git11] https://github.com/hellais/cryptocat&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/HarvardReferences&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Appendices=&lt;br /&gt;
&lt;br /&gt;
==Appendix A: Asynchronous communication and Forward Secrecy==&lt;br /&gt;
&lt;br /&gt;
The protocol is primarily targeted to synchronous cases, however, with some modification it can be used for asynchronous cases.&lt;br /&gt;
&lt;br /&gt;
Provided that the participants are not concerned with authenticating the list of participants (it is OK if Eve impersonates Bob as long as she is unable to read Bob’s messages). Participants can communicate using their pairwise exchanged ephemeral Diffie-Hellman keys until all participants finish the second round of authentication.&lt;br /&gt;
&lt;br /&gt;
As soon as a deniable handshake has been established among a set of participants any subset of them can communicate and authenticate their messages using the “session key” and their ephemeral signature key.&lt;br /&gt;
&lt;br /&gt;
The protocol does not enforce explicitly a time limit on renewing the session key shares and can be used for an asynchronous high latency transport after the key establishment state.&lt;br /&gt;
&lt;br /&gt;
The downside of using a session key for a long time is that a compromised session key will reveal all past communication during that session. This does not pose an imminent threat when the life span of a chat is short. However, in the context of asynchronous high latency transport, it is a more serious concern.&lt;br /&gt;
&lt;br /&gt;
The protocol requires the participants to pre-emptively update their ephemeral signature/shares and propagate them as part of the messages they are already sending. Subsequently, they also update their key share with their neighbours as soon as the neighbours also propagate their new ephemeral signature keys.&lt;br /&gt;
&lt;br /&gt;
As the assumption of having a continuous heartbeat might not be realistic in various asynchronous cases, implementations can assume specific deadlines for dropping users who did not communicate their new keys or shares.&lt;br /&gt;
&lt;br /&gt;
==Appendix B: Other design possibilities==&lt;br /&gt;
During the process of designing ''(n+1)sec'' we have considered and debated other design possibilities which we will describe in this section along side our arguments in favour of the choices made.&lt;br /&gt;
&lt;br /&gt;
===Group Key Scheme vs Broadcast Scheme===&lt;br /&gt;
We say a group key scheme (as defined in [[#V._Chat_Session_Model|Section V]]) is correct if all accepted instances of &amp;lt;math&amp;gt;\Pi^S_i&amp;lt;/math&amp;gt; end up with the same participant lists &amp;lt;math&amp;gt;plist_i&amp;lt;/math&amp;gt; and compute the same session id. &lt;br /&gt;
&lt;br /&gt;
By contrast, a broadcast scheme refers to a scheme in which each participant is broadcasting a message to a set of participants of their choice from a set of potential participants. Each participant will have its own different &amp;lt;math&amp;gt;plist_i&amp;lt;/math&amp;gt; which is able to broadcast as well. See GOTR by [LVH13] For an example of such scheme where each participant chooses there own circle of audiances. &amp;lt;!--In such protocol we define &amp;lt;math&amp;gt;plist_{union} := \cup{i \in {interested participants}} plist_i&amp;lt;/math&amp;gt;.--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Therefore, in the context of a chat room, broadcasting scheme participants do not have the same view of the room and consequently we cannot compute a unified session id &amp;lt;math&amp;gt;sid&amp;lt;/math&amp;gt; based on the list of the participants (as opposed to the group key scheme). In a group key scheme, it is the name of the chat room plus a set of ephemeral keys and the set of ephemeral public keys which uniquely identifies the session. There are advantages and disadvantages to each of these schemes, which we enumerate here:&lt;br /&gt;
&lt;br /&gt;
# Chat room simulation: A group scheme simulates a normal chat room in the absence of an authentication adversary, where the participants all have the same view of who is in the chat room when they start talking. This is not the case in a broadcasting scheme as participants keep different participant lists. This is in conflict with the security assumptions of the authentication properties from the original proposal for ''(n+1)sec''.&lt;br /&gt;
# Consistency: In a group key exchange, the consistency of the participant list (and session id) is provided by the group key exchange protocol. In such a protocol, extra measures need to be taken only to assure the transcript's consistency, i.e. verification of the consistency of delivery and order of messages exchanged between participants. In a broadcast scheme, a new notion needs to be defined and enforced so that a minimum consistency of a conversation can be simulated. For example, as broadcasting to a subset of potential participants is allowed, the notion needs to deal with a situation in which A receives the DH public key of B but wants to send a message to the &amp;quot;room&amp;quot; before it receives the DH key of C.&lt;br /&gt;
# Delayed join and leave: In a group scheme, until all participants confirm their identical view of a new participant list (due to a member joining or leaving the room), they need to assume the status quo. This might delay a new participant from joining a chat or, if no further measure is taken, enable a participant to deny join/leave for the whole group. While various mitigation methods are possible against such attacks (all summarized under the umbrella term &amp;quot;Denial of Service&amp;quot; ) they are not included in threat model considered in ''(n+1)sec'' protocol. &lt;br /&gt;
&lt;br /&gt;
Based on the above differences, we selected a group key scheme for the proposed protocol. This is primarily because room consistency is one of the main security properties desired. However, when it is critical, the sub-protocol described by [[#Sending_and_receiving_messages_ while_joining_is_in_progress|Section VIII.2 Sending and receiving messages while joining is in progress]] allows for communication with users while they are waiting for the join procedure to complete.&lt;br /&gt;
&lt;br /&gt;
===Participatory vs individually independent computation of group key(s)===&lt;br /&gt;
Most AKGE offer some degree of contributiveness in computing the group secret. This roughly means that (at least in the absence of an insider) the group secret is derived using contribution from all members of the group. There has been criticism of the importance of this property such as in [Da14]. In this section we consider briefly the arguments for each side and describe the rational for our choice.&lt;br /&gt;
&lt;br /&gt;
[[Category: np1sec]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Secure_connections</id>
		<title>Secure connections</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Secure_connections"/>
				<updated>2014-05-28T19:10:47Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When communicating data to/from a server it is important that the infromation not be susceptible to man-in-the-middle attacks. If data is communicated over open, plain text mediums such as FTP or HTTP then that data can be intercepted and read by any entity on any of the networks that the information passes through; this can included Local Area Networks, ISPs, or National Entities&lt;br /&gt;
&lt;br /&gt;
There are a number of steps that can be taken to protect communication channels to and from the server, though no system is 100% secure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''SSL'''&lt;br /&gt;
If your website does not have an SSL certificate then all web traffic direct to your site will be unencrypted and potentially subject to snooping, either at the ISP level, at the level of your hosting provider or at a level that specifically targets your site's users locally (ie: local interception of their communications on a coffee shop's wireless network). &lt;br /&gt;
&lt;br /&gt;
Secure Socket Layer(SSL) is a cryptographic protocol which allows secure client-server interactions. Once a secure session has been established between the client, for example your web browser, and the server, your website in this case, all the information that passes between the two is unreadable to external parties.&lt;br /&gt;
&lt;br /&gt;
In order, to provide SSL for your website you must purchase an SSL certificate. This is a digital document that is signed by a recognised certificate reseller that uniquely belongs to your domain. &lt;br /&gt;
&lt;br /&gt;
An added benefit of SSL certificates is that they can aid in preventing SSL spoofing. This occurs where a malicious websites pretend to be a legitimate website or a server pretends to be a legitimate holder of the SSL cert. &lt;br /&gt;
&lt;br /&gt;
Most modern browsers will give a warning if an SSL cert has expired or is invalid - as in that it may be a spoof certificate.&lt;br /&gt;
&lt;br /&gt;
One of the most commonly used SSL software packages on the Internet, OpenSSL, suffered a major security flaw in the shape of the [http://heartbleed.com/ Heart Bleed bug]. This left most websites using a certain version of OpenSSL open to an exploit. This incident highlights that no technology is 100% secure and requires constant monitoring.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''SFTP'''&lt;br /&gt;
When transfering files to or from a remote server it is integral to security to use an SFTP client. This stands for Secure File Tranfer Protocol. In a similar manner to SSL it ensures that the communications to and from the server are not open to external individuals.&lt;br /&gt;
&lt;br /&gt;
An excellent client is [http://cyberduck.io/ Cyberduck]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''SSH'''&lt;br /&gt;
When connecting directly to a server, for example for command line access, it is imperative to use the Secure SHell protocol. As the telnet protocol provides no level of security and should be disabled. For further information see [http://www.openssh.com/ openSSH docs].&lt;br /&gt;
&lt;br /&gt;
For windows a good client is [http://www.putty.org/ putty] for mac and linux the Terminal can be used.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-28T19:06:39Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq document] gives detailed information on each area. eQualit.ie has developed a [https://wiki.deflect.ca/wiki/ISP_reviews review] of existing providers based on experiences with our Deflect network.&lt;br /&gt;
&lt;br /&gt;
*Price - for most groups the cost of the infrastructure will be a major determining factor. however, there are a large number of competitive offers and though this is an important factor it should be used as a boundary to decide what is available not as the sole reason to purchase a service.&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided - for many organisation it is not an option to run their own mail server, however, is they do not wish to sue a free service such as [https://riseup.net Riseup] or [https://gmail.com gmail], or if they wish to have domain specific email - such as info@mywebsite.org - then it is worth considering services that provide free email accounts.&lt;br /&gt;
*Hardware specifications - does the server fits my needs? For most websites basic servers are enough but websites with high traffic can demand more stable or dedicated hardware.&lt;br /&gt;
*Operating systems offered - different operating systems provide different functionality and integration with other applications. They also have different degrees of vulnerability and support.&lt;br /&gt;
*Supported provided - this is an essential aspect when choosing a hosting company. It should also be considered in terms of language support, whether support is provided for software and/or hardware issues.&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs, this feature is hugely useful if it will be necessary to reinstall the operating system on your server. it avoids the need for dedicated time from one of your team members.&lt;br /&gt;
* Server boot and reboot, when installing new applications or updating existing software components, or as a means to resolve an issue, the ability to remotely restart your server can be critical. This is dependent on the type of server you are using. &lt;br /&gt;
* Remote console (sometimes known as KVM), this is invaluable in diagnosing issues with your server's physical hardware but equally is a necessity if you wish to perform full disk encryption as a password will have to be entered before the machine has full booted up.&lt;br /&gt;
* Server and network statistics, this information helps you track your server and/or website giving you detailed information for debugging, tracking attacks or discovering who is visiting your site.&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access is the means by which you can physically connect to your server. Options iclude SSH, SSH key, SFTP or web based&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&lt;br /&gt;
For more details [[Access_Restrictions#Dedicated/VPS_Hosting| see]]&lt;br /&gt;
&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&lt;br /&gt;
For more details see [[Access_Restrictions#Dedicated/VPS_HOSTING| see]]&lt;br /&gt;
&lt;br /&gt;
'''System and Software Management''' is primarily concerned with ensuring that the physical system and its software is setup in the most mangeable, maintainable way and that attention is paid to keeping everything up to date to avoid potential vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
For more details see [[System_Management| see]]&lt;br /&gt;
&lt;br /&gt;
'''Webserver Setup''' is an important consideration when hosting a website. There are a variety of steps that can be taken to lock down a webserver and to make sure that no vulnerabilities or accidental leaks occur. &lt;br /&gt;
&lt;br /&gt;
For more details [[Webserver_setup| see]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
* Hardware is managed and maintained by the hosting provider&lt;br /&gt;
* There is no need to build custom software&lt;br /&gt;
* Using an install of an existing platform, such as Wordpress.com, means that software patching and bug fixing is handled by a dedicated group  &lt;br /&gt;
* Once the solution is setup, secured and configured management is minimal&lt;br /&gt;
* The software platform will provide support for the core functionalities of managing a website such as user creation, content uploading and provide mechanisms for exporting/backup&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
* The provider must be carefully chosen based on the information in this [https://pad.riseup.net/p/rh_ispq document]&lt;br /&gt;
* Software updates must be performed by the organisation&lt;br /&gt;
* Backup is the organisations responsibility&lt;br /&gt;
* No support is provided for configuring or managing the platform&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&lt;br /&gt;
For more details see [[Access_Restrictions#Dedicated/VPS_HOSTING| see]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Password management - the core component of any digital security strategy is control and management of passwords.&lt;br /&gt;
&lt;br /&gt;
For more details [[Access_Restrictions#Dedicated/VPS_Hosting| see]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Software updates and system control - allows the user to lock down the system and restrict what applications are running.&lt;br /&gt;
&lt;br /&gt;
For more details see [[System_Management| see]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
* Host provided support for software and hardware&lt;br /&gt;
* Reduced technical needs for organisation&lt;br /&gt;
* Standardised software components&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
* Heavily relies on the hosting providers technical and support abilities&lt;br /&gt;
* Danger that compromise to another unrelated site could compromise user's site.&lt;br /&gt;
* Your security is tied to that of others using the same system&lt;br /&gt;
* Limited or no control over security procedures - relies heavily on abilities of hosting provider&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* [http://wordpress.com/ Wordpress]&lt;br /&gt;
* [https://www.tumblr.com/ Tumblr]&lt;br /&gt;
* [https://www.journoportfolio.com/ Journo Portfolio]&lt;br /&gt;
* [http://www.joomla.org/ Joomla] &lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
* Host provided support for software and hardware&lt;br /&gt;
* Very low technical needs for organisation&lt;br /&gt;
* Easy setup and quick start&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
* Heavily relies on the hosting providers technical and support abilities&lt;br /&gt;
* No control over system software or hardware&lt;br /&gt;
* Limited security options&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [[Access_Restrictions#Dedicated/VPS_Hosting|here]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Webserver_setup</id>
		<title>Webserver setup</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Webserver_setup"/>
				<updated>2014-05-28T19:01:43Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Apache hardening===&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/ 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Database hardening===&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/ Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/ 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Webserver_setup</id>
		<title>Webserver setup</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Webserver_setup"/>
				<updated>2014-05-28T19:01:21Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Apache hardening===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/ 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Database hardening===&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/ Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/ 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Webserver_setup</id>
		<title>Webserver setup</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Webserver_setup"/>
				<updated>2014-05-28T19:00:52Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Apache hardening===&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/ 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Database hardening===&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/ Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/ 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-28T19:00:05Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq document] gives detailed information on each area. eQualit.ie has developed a [https://wiki.deflect.ca/wiki/ISP_reviews review] of existing providers based on experiences with our Deflect network.&lt;br /&gt;
&lt;br /&gt;
*Price - for most groups the cost of the infrastructure will be a major determining factor. however, there are a large number of competitive offers and though this is an important factor it should be used as a boundary to decide what is available not as the sole reason to purchase a service.&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided - for many organisation it is not an option to run their own mail server, however, is they do not wish to sue a free service such as [riseup.net Riseup] or [gmail.com gmail], or if they wish to have domain specific email - such as info@mywebsite.org - then it is worth considering services that provide free email accounts.&lt;br /&gt;
*Hardware specifications - does the server fits my needs? For most websites basic servers are enough but websites with high traffic can demand more stable or dedicated hardware.&lt;br /&gt;
*Operating systems offered - different operating systems provide different functionality and integration with other applications. They also have different degrees of vulnerability and support.&lt;br /&gt;
*Supported provided - this is an essential aspect when choosing a hosting company. It should also be considered in terms of language support, whether support is provided for software and/or hardware issues.&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs, this feature is hugely useful if it will be necessary to reinstall the operating system on your server. it avoids the need for dedicated time from one of your team members.&lt;br /&gt;
* Server boot and reboot, when installing new applications or updating existing software components, or as a means to resolve an issue, the ability to remotely restart your server can be critical. This is dependent on the type of server you are using. &lt;br /&gt;
* Remote console (sometimes known as KVM), this is invaluable in diagnosing issues with your server's physical hardware but equally is a necessity if you wish to perform full disk encryption as a password will have to be entered before the machine has full booted up.&lt;br /&gt;
* Server and network statistics, this information helps you track your server and/or website giving you detailed information for debugging, tracking attacks or discovering who is visiting your site.&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access is the means by which you can physically connect to your server. Options iclude SSH, SSH key, SFTP or web based&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&lt;br /&gt;
For more details [[Access_Restrictions#Dedicated/VPS_Hosting| see]]&lt;br /&gt;
&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&lt;br /&gt;
For more details see [[Access_Restrictions#Dedicated/VPS_HOSTING| see]]&lt;br /&gt;
&lt;br /&gt;
'''System and Software Management''' is primarily concerned with ensuring that the physical system and its software is setup in the most mangeable, maintainable way and that attention is paid to keeping everything up to date to avoid potential vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
For more details see [[System_Management| see]]&lt;br /&gt;
&lt;br /&gt;
'''Webserver Setup''' is an important consideration when hosting a website. There are a variety of steps that can be taken to lock down a webserver and to make sure that no vulnerabilities or accidental leaks occur. &lt;br /&gt;
&lt;br /&gt;
For more details [[Webserver_setup| see]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
* Hardware is managed and maintained by the hosting provider&lt;br /&gt;
* There is no need to build custom software&lt;br /&gt;
* Using an install of an existing platform, such as Wordpress.com, means that software patching and bug fixing is handled by a dedicated group  &lt;br /&gt;
* Once the solution is setup, secured and configured management is minimal&lt;br /&gt;
* The software platform will provide support for the core functionalities of managing a website such as user creation, content uploading and provide mechanisms for exporting/backup&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
* The provider must be carefully chosen based on the information in this [https://pad.riseup.net/p/rh_ispq document]&lt;br /&gt;
* Software updates must be performed by the organisation&lt;br /&gt;
* Backup is the organisations responsibility&lt;br /&gt;
* No support is provided for configuring or managing the platform&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&lt;br /&gt;
For more details see [[Access_Restrictions#Dedicated/VPS_HOSTING| see]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Password management - the core component of any digital security strategy is control and management of passwords.&lt;br /&gt;
&lt;br /&gt;
For more details [[Access_Restrictions#Dedicated/VPS_Hosting| see]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Software updates and system control - allows the user to lock down the system and restrict what applications are running.&lt;br /&gt;
&lt;br /&gt;
For more details see [[System_Management| see]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
* Host provided support for software and hardware&lt;br /&gt;
* Reduced technical needs for organisation&lt;br /&gt;
* Standardised software components&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
* Heavily relies on the hosting providers technical and support abilities&lt;br /&gt;
* Danger that compromise to another unrelated site could compromise user's site.&lt;br /&gt;
* Your security is tied to that of others using the same system&lt;br /&gt;
* Limited or no control over security procedures - relies heavily on abilities of hosting provider&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* [http://wordpress.com/ Wordpress]&lt;br /&gt;
* [https://www.tumblr.com/ Tumblr]&lt;br /&gt;
* [https://www.journoportfolio.com/ Journo Portfolio]&lt;br /&gt;
* [http://www.joomla.org/ Joomla] &lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
* Host provided support for software and hardware&lt;br /&gt;
* Very low technical needs for organisation&lt;br /&gt;
* Easy setup and quick start&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
* Heavily relies on the hosting providers technical and support abilities&lt;br /&gt;
* No control over system software or hardware&lt;br /&gt;
* Limited security options&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [[Access_Restrictions#Dedicated/VPS_Hosting|here]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-27T18:15:06Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq document] gives detailed information on each area. eQualit.ie has developed a [https://wiki.deflect.ca/wiki/ISP_reviews review] of existing providers based on experiences with our Deflect network.&lt;br /&gt;
&lt;br /&gt;
*Price - for most groups the cost of the infrastructure will be a major determining factor. however, there are a large number of competitive offers and though this is an important factor it should be used as a boundary to decide what is available not as the sole reason to purchase a service.&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided - for many organisation it is not an option to run their own mail server, however, is they do not wish to sue a free service such as [riseup.net Riseup] or [gmail.com gmail], or if they wish to have domain specific email - such as info@mywebsite.org - then it is worth considering services that provide free email accounts.&lt;br /&gt;
*Hardware specifications - does the server fits my needs? For most websites basic servers are enough but websites with high traffic can demand more stable or dedicated hardware.&lt;br /&gt;
*Operating systems offered - different operating systems provide different functionality and integration with other applications. They also have different degrees of vulnerability and support.&lt;br /&gt;
*Supported provided - this is an essential aspect when choosing a hosting company. It should also be considered in terms of language support, whether support is provided for software and/or hardware issues.&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs, this feature is hugely useful if it will be necessary to reinstall the operating system on your server. it avoids the need for dedicated time from one of your team members.&lt;br /&gt;
* Server boot and reboot, when installing new applications or updating existing software components, or as a means to resolve an issue, the ability to remotely restart your server can be critical. This is dependent on the type of server you are using. &lt;br /&gt;
* Remote console (sometimes known as KVM), this is invaluable in diagnosing issues with your server's physical hardware but equally is a necessity if you wish to perform full disk encryption as a password will have to be entered before the machine has full booted up.&lt;br /&gt;
* Server and network statistics, this information helps you track your server and/or website giving you detailed information for debugging, tracking attacks or discovering who is visiting your site.&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access is the means by which you can physically connect to your server. Options iclude SSH, SSH key, SFTP or web based&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&lt;br /&gt;
For more details [[Access_Restrictions#Dedicated/VPS_Hosting| see]]&lt;br /&gt;
&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&lt;br /&gt;
For more details see [[Access_Restrictions#Dedicated/VPS_HOSTING| see]]&lt;br /&gt;
&lt;br /&gt;
'''System and Software Management'''&lt;br /&gt;
&lt;br /&gt;
For more details see [[System_Management| see]]&lt;br /&gt;
&lt;br /&gt;
'''Webserver Setup'''&lt;br /&gt;
&lt;br /&gt;
For more details [[Webserver_setup| see]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [[Access_Restrictions#Dedicated/VPS_Hosting|here]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-27T17:30:55Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq document] gives detailed information on each area. eQualit.ie has developed a [https://wiki.deflect.ca/wiki/ISP_reviews review] of existing providers based on experiences with our Deflect network.&lt;br /&gt;
&lt;br /&gt;
*Price - for most groups the cost of the infrastructure will be a major determining factor. however, there are a large number of competitive offers and though this is an important factor it should be used as a boundary to decide what is available not as the sole reason to purchase a service.&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided - for many organisation it is not an option to run their own mail server, however, is they do not wish to sue a free service such as [riseup.net Riseup] or [gmail.com gmail], or if they wish to have domain specific email - such as info@mywebsite.org - then it is worth considering services that provide free email accounts.&lt;br /&gt;
*Hardware specifications - does the server fits my needs? For most websites basic servers are enough but websites with high traffic can demand more stable or dedicated hardware.&lt;br /&gt;
*Operating systems offered - different operating systems provide different functionality and integration with other applications. They also have different degrees of vulnerability and support.&lt;br /&gt;
*Supported provided - this is an essential aspect when choosing a hosting company. It should also be considered in terms of language support, whether support is provided for software and/or hardware issues.&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs, this feature is hugely useful if it will be necessary to reinstall the operating system on your server. it avoids the need for dedicated time from one of your team members.&lt;br /&gt;
* Server boot and reboot, when installing new applications or updating existing software components, or as a means to resolve an issue, the ability to remotely restart your server can be critical. This is dependent on the type of server you are using. &lt;br /&gt;
* Remote console (sometimes known as KVM), this is invaluable in diagnosing issues with your server's physical hardware but equally is a necessity if you wish to perform full disk encryption as a password will have to be entered before the machine has full booted up.&lt;br /&gt;
* Server and network statistics, this information helps you track your server and/or website giving you detailed information for debugging, tracking attacks or discovering who is visiting your site.&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&lt;br /&gt;
For more details [[Access_Restrictions#Dedicated/VPS_Hosting| see]]&lt;br /&gt;
&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&lt;br /&gt;
For more details see [[Access_Restrictions#Dedicated/VPS_HOSTING| see]]&lt;br /&gt;
&lt;br /&gt;
'''System and Software Management'''&lt;br /&gt;
&lt;br /&gt;
For more details see [[System_Management| see]]&lt;br /&gt;
&lt;br /&gt;
'''Webserver Setup'''&lt;br /&gt;
&lt;br /&gt;
For more details [[Webserver_setup| see]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [[Access_Restrictions#Dedicated/VPS_Hosting|here]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-26T20:00:11Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Threat Mitigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq document] gives detailed information on each area. eQualit.ie has developed a [https://wiki.deflect.ca/wiki/ISP_reviews review] of existing providers based on experiences with our Deflect network.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&lt;br /&gt;
For more details [[Access_Restrictions#Dedicated/VPS_Hosting| see]]&lt;br /&gt;
&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&lt;br /&gt;
For more details see [[Access_Restrictions#Dedicated/VPS_HOSTING| see]]&lt;br /&gt;
&lt;br /&gt;
'''System and Software Management'''&lt;br /&gt;
&lt;br /&gt;
For more details see [[System_Management| see]]&lt;br /&gt;
&lt;br /&gt;
'''Webserver Setup'''&lt;br /&gt;
&lt;br /&gt;
For more details [[Webserver_setup| see]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [[Access_Restrictions#Dedicated/VPS_Hosting|here]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-26T19:59:16Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Mitigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq document] gives detailed information on each area. eQualit.ie has developed a [https://wiki.deflect.ca/wiki/ISP_reviews review] of existing providers based on experiences with our Deflect network.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&lt;br /&gt;
For more details [[Access_Restrictions#Dedicated/VPS_Hosting| see]]&lt;br /&gt;
&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&lt;br /&gt;
For more details see [[Access_Restrictions#Dedicated/VPS_HOSTING| see]]&lt;br /&gt;
&lt;br /&gt;
'''System and Software Management'''&lt;br /&gt;
&lt;br /&gt;
For more details see [[System_Management| see]]&lt;br /&gt;
&lt;br /&gt;
'''Webserver Setup'''&lt;br /&gt;
&lt;br /&gt;
For more details [[Webserver_setup| see]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [|here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-26T19:57:31Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Mitigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq document] gives detailed information on each area. eQualit.ie has developed a [https://wiki.deflect.ca/wiki/ISP_reviews review] of existing providers based on experiences with our Deflect network.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&lt;br /&gt;
For more details [[Access_Restrictions#Dedicated/VPS_Hosting| see]]&lt;br /&gt;
&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&lt;br /&gt;
For more details see [[Access_Restrictions#Dedicated/VPS_HOSTING| see]]&lt;br /&gt;
&lt;br /&gt;
'''System and Software Management'''&lt;br /&gt;
&lt;br /&gt;
For more details see [[System_management| see]]&lt;br /&gt;
&lt;br /&gt;
'''Webserver Setup'''&lt;br /&gt;
&lt;br /&gt;
For more details [[Webserver_setup| see]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [|here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-26T19:57:00Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Mitigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq document] gives detailed information on each area. eQualit.ie has developed a [https://wiki.deflect.ca/wiki/ISP_reviews review] of existing providers based on experiences with our Deflect network.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&lt;br /&gt;
For more details [[Access_Restrictions#Dedicated/VPS_Hosting| see]]&lt;br /&gt;
&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&lt;br /&gt;
For more details see [[Access_Restrictions#Dedicated/VPS_HOSTING| see]]&lt;br /&gt;
&lt;br /&gt;
'''System and Software Management'''&lt;br /&gt;
&lt;br /&gt;
For more details see [[System_management| see]]&lt;br /&gt;
'''Webserver Setup'''&lt;br /&gt;
&lt;br /&gt;
For more details [[Webserver_setup| see]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [|here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/System_Management</id>
		<title>System Management</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/System_Management"/>
				<updated>2014-05-26T19:55:52Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: Created page with &amp;quot;'''Software Management''' &amp;lt;ol&amp;gt; &amp;lt;li&amp;gt; System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular ba...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/ iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/ here] and [http://www.cyberciti.biz/faq/category/iptables/ here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing is a key aspect of server security. All hacking, brute force, DDoS or other attacks should be captured, monitored and analysed. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This [http://www.cyberciti.biz/faq/linux-log-files-location-and-how-do-i-view-logs-files/ guide] describes the location and purpose of common Linux log files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To ensure that information is not lost, overwritten or that the logs do not grow infinitely the tool [http://www.thegeekstuff.com/2010/07/logrotate-examples/ Logrotate] can be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing a tool like Logwatch allows you to monitor and respond to suspicious activity. The following [https://www.digitalocean.com/community/articles/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps guide] describes installing and configuring Logwatch.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Secure_hosting_guide</id>
		<title>Secure hosting guide</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Secure_hosting_guide"/>
				<updated>2014-05-26T19:55:45Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Step 3: Plan for contingency and threat mitigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
This document is the result of a collaborative project between [http://www.huridocs.org/ Huridocs] and [https://equalit.ie eQualit.ie]. &lt;br /&gt;
&lt;br /&gt;
==Useful References==&lt;br /&gt;
* [https://github.com/OpenInternet/MyWebsiteIsDown/blob/master/MyWebsiteIsDown.md What to do when your website goes down]&lt;br /&gt;
* [http://en.flossmanuals.net/wordpress/ Building a Wordpress site] and then [http://moz.com/blog/the-definitive-guide-to-wordpress-security Guide to secure Wordpress set-up]&lt;br /&gt;
* [http://en.flossmanuals.net/video-hosting-guide-t/index/ Independent video hosting]&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Hosting a website that can withstand various malicious attacks and unauthorised access attempts is not an easy task. There are several approaches to mitigating digital threats and reducing your site's vulnerabilities. There is no one-fits-all solution however and the site's owners or administrators should plan for various contingencies well in advance, in lieu of their financial situation and technical expertise. This guide attempts to describe several scenarios and various approaches for secure hosting. &lt;br /&gt;
&lt;br /&gt;
==Step 1: Decide on your level of technical expertise==&lt;br /&gt;
A lot of choices made within this guide will depend on your level of technical expertise dealing with server configuration and maintenance. You should evaluate your situation honestly and try not to exceed this level. We will use the following key to differentiate the difficulty associated with each type of activity. &lt;br /&gt;
&lt;br /&gt;
*'''High Technical''' - multiple experiences of server administration, can confidently install/update server software; apache, mysql, mail server OR access to a consultant with these skills. Do not attempt to learn as you go!&lt;br /&gt;
*'''Intermediate Technical''' - some experience of server administration, can install and manage web services software via guides, can use ssh and commandline interface&lt;br /&gt;
*'''Basic Technical''' - no experience with server management. Can use software management interfaces such as CPanel&lt;br /&gt;
&lt;br /&gt;
'''Required''' - basic knowledge about Internet infrastructure and addressing is required should you want to maintain anything on the Internet (Facebook, twitter, other social networks exempted) that is bound to last the test of time. Please read through [https://learn.equalit.ie/wiki/How_does_the_Internet_actually_work%3F HOW DOES THE INTERNET ACTUALLY WORK?] to get the basics and go on from there. You need to know a little bit about architecture before building your house.&lt;br /&gt;
&lt;br /&gt;
==Step1: What are you planning to host?==&lt;br /&gt;
*[[Website]] - standalone website, blog, forum&lt;br /&gt;
&lt;br /&gt;
==Step 2: What are your hosting options==&lt;br /&gt;
Each category will include details of hosting options for additional reference we include here core hosting types and a methodology for choosing a hosting provider:&lt;br /&gt;
&lt;br /&gt;
*[[Choose a hosting provider]]&lt;br /&gt;
*[[Choose a name registrar]]&lt;br /&gt;
*[[Geography, lesgislation and terms of service]]&lt;br /&gt;
&lt;br /&gt;
==Step 3: Plan for contingency and threat mitigation==&lt;br /&gt;
For each form of system use relevant threats and strategies to mitigate them are include. These approaches are ordered in terms of technical ability requirements. The following topics are relevant to all setups:&lt;br /&gt;
&lt;br /&gt;
*[[System_Management|System Management]]&lt;br /&gt;
*[[Data_Backup|Data backup and recovery]]&lt;br /&gt;
*[[Access Restrictions]]&lt;br /&gt;
*[[Data Encryption]]&lt;br /&gt;
*[[Monitoring]]&lt;br /&gt;
*[[Webserver setup]]&lt;br /&gt;
*[[Secure connections]]&lt;br /&gt;
*[[Brute_Force_DDOS| Denial of Service and Brute Force attacks]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Webserver_setup</id>
		<title>Webserver setup</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Webserver_setup"/>
				<updated>2014-05-26T19:54:21Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: Created page with &amp;quot;Apache hardening'''  As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applicatio...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/ 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/ Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/ 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-26T15:33:39Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Criteria */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq document] gives detailed information on each area. eQualit.ie has developed a [https://wiki.deflect.ca/wiki/ISP_reviews review] of existing providers based on experiences with our Deflect network.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/ link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/ iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/ here] and [http://www.cyberciti.biz/faq/category/iptables/ here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing is a key aspect of server security. All hacking, brute force, DDoS or other attacks should be captured, monitored and analysed. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This [http://www.cyberciti.biz/faq/linux-log-files-location-and-how-do-i-view-logs-files/ guide] describes the location and purpose of common Linux log files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To ensure that information is not lost, overwritten or that the logs do not grow infinitely the tool [http://www.thegeekstuff.com/2010/07/logrotate-examples/ Logrotate] can be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing a tool like Logwatch allows you to monitor and respond to suspicious activity. The following [https://www.digitalocean.com/community/articles/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps guide] describes installing and configuring Logwatch.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/ 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/ Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/ 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [|here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Brute_Force_DDOS</id>
		<title>Brute Force DDOS</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Brute_Force_DDOS"/>
				<updated>2014-05-26T15:24:54Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As well as hacking attacks on servers and infrastructures a common approach to block access by users to content is to perform a Distributed Denial of Service(DDoS) attack. This is a very effective tactic if the attacker has access to either their own botnet infractructure or the financial resources to pay for such an attack.&lt;br /&gt;
&lt;br /&gt;
As DDoS attacks become more common the price of such attacks has dramatically plummeted with many individuals offering such attacks for as little as $10/day - depending on the target. &lt;br /&gt;
&lt;br /&gt;
There are a number of mechanisms and tools available for DDoS mitigation depending on the type of hosting.&lt;br /&gt;
&lt;br /&gt;
==Shared Hosting==&lt;br /&gt;
&lt;br /&gt;
In this scenario, unless the provider offers DDoS mitigation services, it is best to seek the aid of an external group. Several groups provide free online services that offer complete DDoS protection for NGO, Journalist, Activist or Civil Society websites. The following roups provide completely free services.&lt;br /&gt;
&lt;br /&gt;
'''Deflect.ca'''&lt;br /&gt;
Is a free(and will always be free) open source non-commerical system made for activists by activists. Sign up for a site is straight forward, simply visit [https://deflect.ca Deflect].&lt;br /&gt;
&lt;br /&gt;
Deflect is sensitive to the special requirements of its users and can upon request securely destroy all logs. &lt;br /&gt;
&lt;br /&gt;
'''CloudFlare'''&lt;br /&gt;
This is a commerical system which also provides free services for civil society websites. As the site is commericial users are subject to their terms and conditions. It is a large, successful provider with many commercial clients. It is in its best interest to provide a strong service but free clients may not receive the same level of support as those who pay.&lt;br /&gt;
&lt;br /&gt;
'''Project Shield'''&lt;br /&gt;
Is Google's offering in the DDoS mitigation space. Again it is backed by a large corporation with a great deal of resources at their disposal. For civil society websites its service is free. Project Shield is currently invite-only.&lt;br /&gt;
&lt;br /&gt;
==Dedicated/VPS Hosting==&lt;br /&gt;
&lt;br /&gt;
As above all websites can benefit from the special services of the above groups if they qualify for free protection. This is by far the simplest approach and places the work load with experienced professionals.&lt;br /&gt;
&lt;br /&gt;
If, however, the user wishes to set up their own anti-DDoS system there are a number of open source tools that can help.&lt;br /&gt;
&lt;br /&gt;
'''BotnetDBP'''&lt;br /&gt;
Is a suite of tools that evolves from the original fail2ban to offer a range of functionality. The core elements are a fast banning system, Banjax/Swabber, which is plugged into the Apache Traffic Server(ATS) proxy system. A machine learning tool, learn2ban, which is capable of identifying malicious botnet requesters based on pre-built models of attacks. And finally, Challenger, which offers the ability to respond to botnet, or suspected botnet, requests with either a Javascript challenge or a by serving a captcha page to determine the legitimacy of the request.&lt;br /&gt;
&lt;br /&gt;
More information can be found [https://wiki.deflect.ca/wiki/BotnetDBP here]&lt;br /&gt;
&lt;br /&gt;
'''Open Source Deflect'''&lt;br /&gt;
&lt;br /&gt;
Deflect itself can be deployed by individuals or groups to create their very own Deflect network. All is required is to follow the [https://wiki.deflect.ca/wiki/Deflect_DIY Deflect DIY]&lt;br /&gt;
&lt;br /&gt;
'''Fail2ban'''&lt;br /&gt;
Is a regex based banning tool that is extremely effective against DoS and brute force attacks. It is used in conjunction with IPTables to ban malicious requests that match its defined regular expressions. It can be found [http://www.fail2ban.org/wiki/index.php/Main_Page here]. fail2ban's default configuration enables it to block attackers attempting to brute force username and password combinations to the SSH service. If a server's SSH port is exposed to the open internet, then it is strongly advised that fail2ban or a similar tool be installed. &lt;br /&gt;
&lt;br /&gt;
Against brute force password attacks fail2ban is an extremely useful tool. It can be set to ban IP Address that repeatedly attempt to access certain website pages, such as the login or admin pages.&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Secure_connections</id>
		<title>Secure connections</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Secure_connections"/>
				<updated>2014-05-26T15:24:13Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When communicating data to/from a server it is important that the infromation not be susceptible to man-in-the-middle attacks. If data is communicated over open, plain text mediums such as FTP or HTTP then that data can be intercepted and read by any entity on any of the networks that the information passes through; this can included Local Area Networks, ISPs, or National Entities&lt;br /&gt;
&lt;br /&gt;
There are a number of steps that can be taken to protect communication channels to and from the server, though no system is 100% secure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''SSL'''&lt;br /&gt;
If your website does not have an SSL certificate then all web traffic direct to your site will be unencrypted and potentially subject to snooping, either at the ISP level, at the level of your hosting provider or at a level that specifically targets your site's users locally (ie: local interception of their communications on a coffee shop's wireless network). &lt;br /&gt;
&lt;br /&gt;
Secure Socket Layer(SSL) is a cryptographic protocol which allows secure client-server interactions. Once a secure session has been established between the client, for example your web browser, and the server, your website in this case, all the information that passes between the two is unreadable to external parties.&lt;br /&gt;
&lt;br /&gt;
In order, to provide SSL for your website you must purchase an SSL certificate. This is a digital document that is signed by a recognised certificate reseller that uniquely belongs to your domain. &lt;br /&gt;
&lt;br /&gt;
An added benefit of SSL certificates is that they can aid in preventing SSL spoofing. This occurs where a malicious websites pretend to be a legitimate website or a server pretends to be a legitimate holder of the SSL cert. &lt;br /&gt;
&lt;br /&gt;
Most modern browsers will give a warning if an SSL cert has expired or is invalid - as in that it may be a spoof certificate.&lt;br /&gt;
&lt;br /&gt;
One of the most commonly used SSL software packages on the Internet, OpenSSL, suffered a major security flaw in the shape of the [http://heartbleed.com/ Heart Bleed bug]. This left most websites using a certain version of OpenSSL open to an exploit. This incident highlights that no technology is 100% secure and requires constant monitoring.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''SFTP'''&lt;br /&gt;
When transfering files to or from a remote server it is integral to security to use an SFTP client. This stands for Secure File Tranfer Protocol. In a similar manner to SSL it ensures that the communications to and from the server are not open to external individuals.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''SSH'''&lt;br /&gt;
When connecting directly to a server, for example for command line access, it is imperative to use the Secure SHell protocol. As the telnet protocol provides no level of security and should be disabled. For further information see []&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Data_Encryption</id>
		<title>Data Encryption</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Data_Encryption"/>
				<updated>2014-05-26T15:22:46Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are a number of options for data encryption for secure server hosting, however, for Shared Hosting or CPanel style hosts encryption options are very limited. For Dedicated/VPS hosting, administrator's have the option of encrypting the entire disk or encrypting portions where sensitive file data will be stored. We will explore both approaches, noting benefits and downsides for both.&lt;br /&gt;
&lt;br /&gt;
==Whole Disk Encryption==&lt;br /&gt;
The major issue with whole disk encryption is that a reboot will require the entry of a password before the system is mounted. To be able to do this your provider would need to give access to the machine via a KVM, which allows remote access to a keyboard console as the machine boots. This is a non-standard setup and some providers may charge additional fees for it.&lt;br /&gt;
&lt;br /&gt;
Advanced users using whole-disk encryption may set up the DropBear SSH daemon in their boot loader, which allows for the use &lt;br /&gt;
&lt;br /&gt;
The significant benefit to whole disk encryption that if the machine is seized by outside parties they will have no access to the operating system or disk itself. This means that no data on the machine will be leaked in that eventuality. This also denies attackers the ability to modify most local system binaries to attempt to intercept passwords, provide backdoors or log user actions. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The [https://code.google.com/p/cryptsetup/ Linux Unified Key System(LUKS)] also for both full and partial disk encryption.&lt;br /&gt;
&lt;br /&gt;
An in-depth tutorial for LUKS setup can be found [https://wiki.archlinux.org/index.php/Dm-crypt/Encrypting_an_entire_system here] and a simpler one can be found [http://www.hermann-uwe.de/blog/howto-disk-encryption-with-dm-crypt-luks-and-debian here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
==Data Store Encryption==&lt;br /&gt;
An alternative to whole disk encryption is to encrypt specific portions of the disk containing the most sensitive data that must be protected. Care should be taken to encrypt both data at rest (ie a database, MySQL etc.) and &amp;quot;scratch&amp;quot; or temporary data storage (search engine technologies such as Solr, Memcached data stores etc.).&lt;br /&gt;
&lt;br /&gt;
This removes the need for entry of a boot password on reboot but it does leave any elements of the disk not encrypted open to access if the machine is seized or compromised.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The tool [http://www.arg0.net/encfs encfs] runs in the user space and allows the creation of encrypted partitions. These partitions can be mounted once the system has been booted. The tool allows for very strict control over which users can access mounted information once a partition has been decrypted and is suited to applications where a specific user/process accesses the encrypted data. &lt;br /&gt;
&lt;br /&gt;
The encrypted partitions can be defined at variable sizes and the sensitive datastores and applications can be run from within them once the partition has been mounted.&lt;br /&gt;
&lt;br /&gt;
A guide for setting up &amp;lt;tt&amp;gt;encfs&amp;lt;/tt&amp;gt; can be found [http://www.howtoforge.com/encrypt-your-data-with-encfs-debian-squeeze-ubuntu-11.10 here]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The Linux kernel offers support for &amp;lt;tt&amp;gt;ecryptfs&amp;lt;/tt&amp;gt; partitions. These partitions are mounted like any other local filesystem, but with the benefit of the device being encrypted while unmounted. These partitions are mounted like other filesystems and not in user space so they cannot be mounted by unprivileged users. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The LUKS tool can also be set to encrypted only specific partitions and mounted in a similar way to &amp;lt;tt&amp;gt;encfs&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Access_Restrictions</id>
		<title>Access Restrictions</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Access_Restrictions"/>
				<updated>2014-05-26T15:22:01Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Restricting access to data based on roles, rights and responsibilities is an integral part of any security policy. It is equally true in the framing of secure hosting.&lt;br /&gt;
&lt;br /&gt;
In this circumstance, access should be clearly separated into roles at different levels. When hosting a web application a separate password and user should be used for database access by the web application. The web application should never have root access to any other domain. In a similar way, real world users should be divided into roles and categories and non-should be granted full root access.&lt;br /&gt;
&lt;br /&gt;
==Dedicated/VPS Hosting==&lt;br /&gt;
&lt;br /&gt;
'''Password Management''' is the core of any security strategy. For dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain upper and lower case characters, numbers and special characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging, the chaging command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/ link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Failed login attempts should result in the locking of the associated user account. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html Faillog]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on Dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux SSH tutorial]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shared Hosting==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''Password Management'''&lt;br /&gt;
For shared hosting password managment is a core defence against attack. The administrator password should fit the criteria above for a strong password - long, variance in characters containing no dictionary words.&lt;br /&gt;
&lt;br /&gt;
As above [https://securityinabox.org/en/keepass_main Keepass] can be used to generate and store a complex admin password. This has the secondary advantage of limiting access to the admin password to those who are trusted with the Keepass store.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Restrict IP addresses'''&lt;br /&gt;
&lt;br /&gt;
Depending on what version of CPanel your provider offers, it is possible to lock down access via [http://docs.cpanel.net/twiki/bin/view/AllDocumentation/WHMDocs/DenyAccess Host Access Control] option. This allows you limit access to very specific IP addresses.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''User management'''&lt;br /&gt;
User accounts on a Shared Hosting system should be restricted only to those whose core responsibility is for updating or maintaining the organisations site.&lt;br /&gt;
Access information should, however, also be stored by the Organisation as part of their regular backups - in the event that the responsible party leaves the Organisation.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Geography,_lesgislation_and_terms_of_service</id>
		<title>Geography, lesgislation and terms of service</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Geography,_lesgislation_and_terms_of_service"/>
				<updated>2014-05-26T15:20:34Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For Activists, Journalists, NGOs or any Civil Society online participants, legal and geographic jurisdiction should be forefront when considering where to host their websites.&lt;br /&gt;
&lt;br /&gt;
==Legal Jurisdictions==&lt;br /&gt;
The Internet has introduced a dislocated sense of legal jurisdiction, in some cases the problem of applying one countries laws to a different jurisdiction is not a new conception. Over time many countries have developed contracts, treaties and agreements with other states governing extradition of individuals who are wanted for breach of one country's legal code but are currently residing in another country. &lt;br /&gt;
&lt;br /&gt;
There have been a number of cases in the last decade ranging from extremely high profile, Julian Assange and Edward Snowden, to limited attention paid, [https://en.wikipedia.org/wiki/Gary_McKinnon Gary McKinnion].&lt;br /&gt;
&lt;br /&gt;
In many countries a core weapon used for censorship, oppression and repression is the judiciary and the enacting or novel use of laws designed to restrict freedoms. This is a very effective tactic and the results can be seen in countries such as Vietnam where a number of individuals have been tried for publishing material consider by the authorities to be illegal; either because of content - deemed anti-governmental - or method of publishing - publication under pseudonyms.&lt;br /&gt;
&lt;br /&gt;
Publication within the Jurisdiction of a given country can leave the publishers open to legal punishment.&lt;br /&gt;
&lt;br /&gt;
Ultimately, hosting a site in a different political or legal jurisdiction can not prevent recriminations against journalist, organisation or activists with country. It can prevent the ability to physical take the site or publication offline.&lt;br /&gt;
&lt;br /&gt;
This can be hampered in part by the use of intermediary resellers. For example, in the case of Cambodia hosting platforms are located outside of the country, however, access to these services is done through local resellers who are subject to Cambodian law. These resellers are chosen largely for language and immediacy of access to support.&lt;br /&gt;
&lt;br /&gt;
In determining the current laws that are applied or may be applied to your work or your locale there are a number of resources provided by monitoring groups that can be used as a starting point. This information is far from complete and is often only able to report on what legal tools have been used in the past.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://defendersdays.civilrightsdefenders.org/ Civil Rights Defenders]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.iltb.net/ Indian Law and Technology blog]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.openrightsgroup.org/ Open Rights Group]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[https://supporters.eff.org/ Electronic Frontier Foundation (EFF)]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[https://www.cpj.org/ Committee to protect Journalists]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://freedomhouse.org/ Freedom House]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://witness.org/ Witness]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.frontlinedefenders.org/ Frontline Defenders]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.lwob.org/Pages/Default.aspx Lawyers without Borders]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[https://iscproject.org/country-assessments/ ISC Project]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Many countries have specialised legal aide and free legal advice centres that can be contacted to help determine what laws may apply to your work&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Geographic Areas==&lt;br /&gt;
&lt;br /&gt;
Locating a server within a groups own geographic area, where their adversary is the authority or power groups within that geography will leave the site open to infrastructural attacks or censorship. &lt;br /&gt;
&lt;br /&gt;
As the site is located within the country's own infrastructure it is subject to all censorship applied by the state, ISP or national gateway.&lt;br /&gt;
&lt;br /&gt;
==Publishing and Content Legislation==&lt;br /&gt;
&lt;br /&gt;
Censorship through legal means is a prevalent form of suppression and a cause of self censorship. It is extremely important that organisations, journalists and individual take responsibility for their own education in terms of awareness of new digital laws as well as past applications and precedents set in prosecution.&lt;br /&gt;
&lt;br /&gt;
==Terms and Conditions==&lt;br /&gt;
&lt;br /&gt;
Carefully choice should be made in terms of the provider themselves. A strong reputation for support, quality and security is important but as to is alignment with your organisations goals.&lt;br /&gt;
&lt;br /&gt;
Ultimately, a contract is agreed between your organisation and the service provider. This contract governs how, when, and under what circumstances service will or won't be provided. &lt;br /&gt;
&lt;br /&gt;
If your provider has a history of discontinuing service to activists, journalist or civil society groups, or request that they self censor - then it is important to establish this at the outset. It is necessary to determine with your provider what content they might prohibit or what rules govern the extent to which they will support activists in publishing their work.&lt;br /&gt;
&lt;br /&gt;
There are already a number of service providers that aim to support the activists, NGO and non-profit world. Amongst them are [https://greenhost.net/about-us/ Green Host], [https://help.riseup.net/en/about-us Riseup] and [https://leap.se/en/about-us Leap].&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Website</id>
		<title>Website</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Website"/>
				<updated>2014-05-26T15:19:04Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
A website could be an organisation's main information portal - where they can publish material about themselves, their work and projects and articles or reports that they have produced. It can also take the simpler form of a standalone blog where content is shared with their intended  audience, or may be represented as a forum or wiki where user generated content is published and shared. &lt;br /&gt;
&lt;br /&gt;
An organisation usually depends entirely on their main website as their presence on the Internet and expects it to function at all times.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===DIY CMS===&lt;br /&gt;
There are numerous well developed and 'continually maintained' content mangement systems that you can install and configure from scratch. They differ between their application and intended purpose, the majority however relying on a [http://en.wikipedia.org/wiki/LAMP_(software_bundle) LAMP] or [http://en.wikipedia.org/wiki/WAMP#Variants_and_equivalents_on_other_platforms WAMP] backend. Each CMS has its own particular requirements for webserver, database server and PHP configurations, as well as security considerations for them. &lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*Total control of the CMS software, plug-ins, themes and preferred configuration&lt;br /&gt;
*Fine-grained access control and modification of CMS features&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*A whole software ecosystem to learn with every new CMS&lt;br /&gt;
*Responsibility for software updates and malware protection&lt;br /&gt;
*Responsibility for data security &lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* [http://codex.wordpress.org/Installing_WordPress Wordpress.com] installation&lt;br /&gt;
* [https://civicrm.org/ CiviCRM] is an open source CRm environment intended for civil society use.&lt;br /&gt;
* [https://www.djangoproject.com/ Custom Django app], allows for creation quickly of high content, high functionality websites. Django's security systems re well [https://docs.djangoproject.com/en/dev/topics/security/ documented] and well integrated. Development of a Django app will require developer time and potentially also some design work.&lt;br /&gt;
* [https://drupal.org/ Custom Drupal site], again a ready made configurable solution, with a developed sense of security integration - though as with the other solutions security relies on a holistic approach including server side security.&lt;br /&gt;
'''Hosting Requirements'''&lt;br /&gt;
*[[Choose_a_hosting_provider#High_Technical]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted CMS===&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
* Dependent on hosting package, support and updates will be handled by provider reducing need for tech knowledge&lt;br /&gt;
* Straightforward and fast to setup&lt;br /&gt;
* Greater usability for low tech users&lt;br /&gt;
* Potential lower cost&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
* Subject to terms and conditions of provider - controversial information or information that draws large scale attacks such as DDoS may cause provider to rescind service.&lt;br /&gt;
* No control of hardware systems&lt;br /&gt;
* Reliant on provider for software security updates to be applied&lt;br /&gt;
* Limited control of jurisdiction or geography area that site is hosted within.&lt;br /&gt;
* Reliance on providers support, which may not be available in local language&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* [http://wordpress.com/ Wordpress.com]&lt;br /&gt;
* [http://wpengine.com/ WPEngine]&lt;br /&gt;
* [http://tumblr.com Tumblr]&lt;br /&gt;
'''Hosting Requirements'''&lt;br /&gt;
*[[Choose_a_hosting_provider#High_Technical]]&lt;br /&gt;
*[[Choose_a_hosting_provider#Intermediary_Technical]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hosted website===&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog user's have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
Care should be taken when considering a free service that offers a hosted CMS. Some free hosted CMS will not offer a good experience as sites that are problematic or troublesome may be taken offline without notice and with no recourse as the provider is under no obligation to serve the user. &lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
* No technical barrier to entry&lt;br /&gt;
* Support provided by commerical company, with an interest in protecting their reputation both in terms of uptime but also in terms of avoiding security breaches&lt;br /&gt;
* Greater likelihood of support in local language - at least in terms of documentation&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
* Lack of control of any systems underlying website&lt;br /&gt;
* Reliance on provider for support&lt;br /&gt;
* Subject to providers terms and conditions, which may restrict publications&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* [http://squarespace.com SquareSpace]&lt;br /&gt;
* &lt;br /&gt;
*&lt;br /&gt;
'''Hosting Requirements'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''DIY CMS'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Hosted CMS'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Hosted Website'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
[[Category: Secure Hosting ]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-26T15:17:27Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/ link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/ iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/ here] and [http://www.cyberciti.biz/faq/category/iptables/ here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing is a key aspect of server security. All hacking, brute force, DDoS or other attacks should be captured, monitored and analysed. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This [http://www.cyberciti.biz/faq/linux-log-files-location-and-how-do-i-view-logs-files/ guide] describes the location and purpose of common Linux log files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To ensure that information is not lost, overwritten or that the logs do not grow infinitely the tool [http://www.thegeekstuff.com/2010/07/logrotate-examples/ Logrotate] can be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing a tool like Logwatch allows you to monitor and respond to suspicious activity. The following [https://www.digitalocean.com/community/articles/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps guide] describes installing and configuring Logwatch.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/ 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/ Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/ 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [|here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-26T15:15:01Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Criteria */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/| iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/| here] and [http://www.cyberciti.biz/faq/category/iptables/| here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing is a key aspect of server security. All hacking, brute force, DDoS or other attacks should be captured, monitored and analysed. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This [http://www.cyberciti.biz/faq/linux-log-files-location-and-how-do-i-view-logs-files/| guide] describes the location and purpose of common Linux log files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To ensure that information is not lost, overwritten or that the logs do not grow infinitely the tool [http://www.thegeekstuff.com/2010/07/logrotate-examples/| Logrotate] can be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing a tool like Logwatch allows you to monitor and respond to suspicious activity. The following [https://www.digitalocean.com/community/articles/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps| guide] describes installing and configuring Logwatch.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page| Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page| Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [|here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress| guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-26T15:14:47Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Criteria */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq |document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/| iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/| here] and [http://www.cyberciti.biz/faq/category/iptables/| here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing is a key aspect of server security. All hacking, brute force, DDoS or other attacks should be captured, monitored and analysed. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This [http://www.cyberciti.biz/faq/linux-log-files-location-and-how-do-i-view-logs-files/| guide] describes the location and purpose of common Linux log files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To ensure that information is not lost, overwritten or that the logs do not grow infinitely the tool [http://www.thegeekstuff.com/2010/07/logrotate-examples/| Logrotate] can be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing a tool like Logwatch allows you to monitor and respond to suspicious activity. The following [https://www.digitalocean.com/community/articles/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps| guide] describes installing and configuring Logwatch.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page| Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page| Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [|here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress| guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-26T15:14:34Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Criteria */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq | document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/| iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/| here] and [http://www.cyberciti.biz/faq/category/iptables/| here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing is a key aspect of server security. All hacking, brute force, DDoS or other attacks should be captured, monitored and analysed. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This [http://www.cyberciti.biz/faq/linux-log-files-location-and-how-do-i-view-logs-files/| guide] describes the location and purpose of common Linux log files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To ensure that information is not lost, overwritten or that the logs do not grow infinitely the tool [http://www.thegeekstuff.com/2010/07/logrotate-examples/| Logrotate] can be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing a tool like Logwatch allows you to monitor and respond to suspicious activity. The following [https://www.digitalocean.com/community/articles/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps| guide] describes installing and configuring Logwatch.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page| Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page| Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [|here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress| guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Data_Encryption</id>
		<title>Data Encryption</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Data_Encryption"/>
				<updated>2014-05-26T15:12:19Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are a number of options for data encryption for secure server hosting, however, for Shared Hosting or CPanel style hosts encryption options are very limited. For Dedicated/VPS hosting, administrator's have the option of encrypting the entire disk or encrypting portions where sensitive file data will be stored. We will explore both approaches, noting benefits and downsides for both.&lt;br /&gt;
&lt;br /&gt;
==Whole Disk Encryption==&lt;br /&gt;
The major issue with whole disk encryption is that a reboot will require the entry of a password before the system is mounted. To be able to do this your provider would need to give access to the machine via a KVM, which allows remote access to a keyboard console as the machine boots. This is a non-standard setup and some providers may charge additional fees for it.&lt;br /&gt;
&lt;br /&gt;
Advanced users using whole-disk encryption may set up the DropBear SSH daemon in their boot loader, which allows for the use &lt;br /&gt;
&lt;br /&gt;
The significant benefit to whole disk encryption that if the machine is seized by outside parties they will have no access to the operating system or disk itself. This means that no data on the machine will be leaked in that eventuality. This also denies attackers the ability to modify most local system binaries to attempt to intercept passwords, provide backdoors or log user actions. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The [https://code.google.com/p/cryptsetup/| Linux Unified Key System(LUKS)] also for both full and partial disk encryption.&lt;br /&gt;
&lt;br /&gt;
An in-depth tutorial for LUKS setup can be found [https://wiki.archlinux.org/index.php/Dm-crypt/Encrypting_an_entire_system| here] and a simpler one can be found [http://www.hermann-uwe.de/blog/howto-disk-encryption-with-dm-crypt-luks-and-debian| here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
==Data Store Encryption==&lt;br /&gt;
An alternative to whole disk encryption is to encrypt specific portions of the disk containing the most sensitive data that must be protected. Care should be taken to encrypt both data at rest (ie a database, MySQL etc.) and &amp;quot;scratch&amp;quot; or temporary data storage (search engine technologies such as Solr, Memcached data stores etc.).&lt;br /&gt;
&lt;br /&gt;
This removes the need for entry of a boot password on reboot but it does leave any elements of the disk not encrypted open to access if the machine is seized or compromised.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The tool [http://www.arg0.net/encfs| encfs] runs in the user space and allows the creation of encrypted partitions. These partitions can be mounted once the system has been booted. The tool allows for very strict control over which users can access mounted information once a partition has been decrypted and is suited to applications where a specific user/process accesses the encrypted data. &lt;br /&gt;
&lt;br /&gt;
The encrypted partitions can be defined at variable sizes and the sensitive datastores and applications can be run from within them once the partition has been mounted.&lt;br /&gt;
&lt;br /&gt;
A guide for setting up &amp;lt;tt&amp;gt;encfs&amp;lt;/tt&amp;gt; can be found [http://www.howtoforge.com/encrypt-your-data-with-encfs-debian-squeeze-ubuntu-11.10| here]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The Linux kernel offers support for &amp;lt;tt&amp;gt;ecryptfs&amp;lt;/tt&amp;gt; partitions. These partitions are mounted like any other local filesystem, but with the benefit of the device being encrypted while unmounted. These partitions are mounted like other filesystems and not in user space so they cannot be mounted by unprivileged users. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The LUKS tool can also be set to encrypted only specific partitions and mounted in a similar way to &amp;lt;tt&amp;gt;encfs&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-25T18:29:27Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq| document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/| iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/| here] and [http://www.cyberciti.biz/faq/category/iptables/| here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing is a key aspect of server security. All hacking, brute force, DDoS or other attacks should be captured, monitored and analysed. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This [http://www.cyberciti.biz/faq/linux-log-files-location-and-how-do-i-view-logs-files/| guide] describes the location and purpose of common Linux log files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To ensure that information is not lost, overwritten or that the logs do not grow infinitely the tool [http://www.thegeekstuff.com/2010/07/logrotate-examples/| Logrotate] can be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing a tool like Logwatch allows you to monitor and respond to suspicious activity. The following [https://www.digitalocean.com/community/articles/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps| guide] describes installing and configuring Logwatch.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page| Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page| Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [|here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress| guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-25T18:28:32Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq| document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/| iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/| here] and [http://www.cyberciti.biz/faq/category/iptables/| here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing is a key aspect of server security. All hacking, brute force, DDoS or other attacks should be captured, monitored and analysed. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This [http://www.cyberciti.biz/faq/linux-log-files-location-and-how-do-i-view-logs-files/| guide] describes the location and purpose of common Linux log files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To ensure that information is not lost, overwritten or that the logs do not grow infinitely the tool [http://www.thegeekstuff.com/2010/07/logrotate-examples/| Logrotate] can be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing a tool like Logwatch allows you to monitor and respond to suspicious activity. The following [https://www.digitalocean.com/community/articles/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps| guide] describes installing and configuring Logwatch.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page| Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page| Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [|here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress| guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-25T18:28:05Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Basic Technical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq| document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/| iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/| here] and [http://www.cyberciti.biz/faq/category/iptables/| here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing is a key aspect of server security. All hacking, brute force, DDoS or other attacks should be captured, monitored and analysed. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This [http://www.cyberciti.biz/faq/linux-log-files-location-and-how-do-i-view-logs-files/| guide] describes the location and purpose of common Linux log files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To ensure that information is not lost, overwritten or that the logs do not grow infinitely the tool [http://www.thegeekstuff.com/2010/07/logrotate-examples/| Logrotate] can be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing a tool like Logwatch allows you to monitor and respond to suspicious activity. The following [https://www.digitalocean.com/community/articles/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps| guide] describes installing and configuring Logwatch.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page| Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page| Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [|here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress| guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-25T18:27:46Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Basic Technical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq| document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/| iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/| here] and [http://www.cyberciti.biz/faq/category/iptables/| here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing is a key aspect of server security. All hacking, brute force, DDoS or other attacks should be captured, monitored and analysed. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This [http://www.cyberciti.biz/faq/linux-log-files-location-and-how-do-i-view-logs-files/| guide] describes the location and purpose of common Linux log files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To ensure that information is not lost, overwritten or that the logs do not grow infinitely the tool [http://www.thegeekstuff.com/2010/07/logrotate-examples/| Logrotate] can be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing a tool like Logwatch allows you to monitor and respond to suspicious activity. The following [https://www.digitalocean.com/community/articles/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps| guide] describes installing and configuring Logwatch.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page| Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page| Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog users have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Strong Passwords''' are a core element of any system. The access password for the host should be restricted to those individuals with the organisation that work directly with the server.&lt;br /&gt;
&lt;br /&gt;
Safe password creation and storage procedures should be followed, as described [|here]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Malware''' is core vulnerability for the devices used by those managing and logging into the hosted system. Malware, keyloggers and viruses provided a straightforward means of attack.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The attacker does not need to hack or compromise the server, instead via infection through phishing emails or malicious websites the attacker can log and store the passwords and other critical information.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To mitigate this threat all individuals who work with or have login access to the server must have anti-virus installed, a firewall and have an up to date system. For more information [|see]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Two factor Authentication''' should be enabled where available as this will make compromising a system significantly more difficult.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Wordpress Security''' is described in detail in the following [http://codex.wordpress.org/Hardening_WordPress| guide]. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-25T18:18:25Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Mitigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq| document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/| iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/| here] and [http://www.cyberciti.biz/faq/category/iptables/| here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing is a key aspect of server security. All hacking, brute force, DDoS or other attacks should be captured, monitored and analysed. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This [http://www.cyberciti.biz/faq/linux-log-files-location-and-how-do-i-view-logs-files/| guide] describes the location and purpose of common Linux log files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To ensure that information is not lost, overwritten or that the logs do not grow infinitely the tool [http://www.thegeekstuff.com/2010/07/logrotate-examples/| Logrotate] can be used.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing a tool like Logwatch allows you to monitor and respond to suspicious activity. The following [https://www.digitalocean.com/community/articles/how-to-install-and-use-logwatch-log-analyzer-and-reporter-on-a-vps| guide] describes installing and configuring Logwatch.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page| Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page| Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog user's have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
strong passwords, 2 factor auth,&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-25T18:11:19Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Mitigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq| document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/| iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/| here] and [http://www.cyberciti.biz/faq/category/iptables/| here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Anti-intrusion system,&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page| Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page| Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog user's have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
strong passwords, 2 factor auth,&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-25T18:10:21Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Mitigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq| document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/| iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/| here] and [http://www.cyberciti.biz/faq/category/iptables/| here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Anti-intrusion system,&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page| Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 sestatus&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To enable run&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page| Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog user's have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
strong passwords, 2 factor auth,&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-25T18:08:10Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* High Technical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq| document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall can be enabled via [http://www.netfilter.org/projects/iptables/| iptables] the guides [http://www.tecmint.com/basic-guide-on-iptables-linux-firewall-tips-commands/| here] and [http://www.cyberciti.biz/faq/category/iptables/| here] describe iptables configuration.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To protect the server it is important to audit the open ports on the machine. To check listening ports you can run&lt;br /&gt;
&lt;br /&gt;
 netstat -tulpn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Anti-intrusion system,&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://selinuxproject.org/page/Main_Page| Security Enhanced Linux(SELinux)] is a kernel level security control mechanism, which enforces a set of rules and procedures for the system. SELinux provides fine grained control for access rights and permissions.&lt;br /&gt;
&lt;br /&gt;
To check if it is enabled run&lt;br /&gt;
&lt;br /&gt;
 sestatus&lt;br /&gt;
&lt;br /&gt;
To enable run&lt;br /&gt;
&lt;br /&gt;
 setenforce enforcing&lt;br /&gt;
&lt;br /&gt;
To adjust the SELinux config is available at&lt;br /&gt;
&lt;br /&gt;
 /etc/selinux/config &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.fail2ban.org/wiki/index.php/Main_Page| Fail2ban] is an excellent tool that can be used both to combat simple DDoS attacks but also to detect and block brute force login attempts.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog user's have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
strong passwords, 2 factor auth,&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-25T17:51:23Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
&lt;br /&gt;
There are several aspects which should be considered when selecting a service host. Below is a general list, this [https://pad.riseup.net/p/rh_ispq| document] gives detailed information on each area.&lt;br /&gt;
&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
It is quite important to consider the possibilities offered by your provider's control panel. If you need to write a support ticket everytime the server has to  reboot, it wont be an efficient process, especially during a crises. Possible features to look out for include&lt;br /&gt;
&lt;br /&gt;
* Automated operating system installs&lt;br /&gt;
* Server boot and reboot&lt;br /&gt;
* Remote console (sometimes known as KVM)&lt;br /&gt;
* Server and network statistics&lt;br /&gt;
* Dynamic components (e.g. adding extra disk space, RAM without rebuilding the machine or having to order a new service)&lt;br /&gt;
* Server access (varies between SSH, SFTP or web based)&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* http://www.ovh.com/ca/en/dedicated-servers/hosting/&lt;br /&gt;
* http://www.soyoustart.com/ie/offers.xml&lt;br /&gt;
* http://www.hetzner.de/en/hosting/produktmatrix/rootserver&lt;br /&gt;
* http://www.coolhousing.net/hosting-dedicated-servers.html&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Examples'''&lt;br /&gt;
* https://www.linode.com/pricing&lt;br /&gt;
* https://chhost.net/virtual-server/&lt;br /&gt;
* https://www.tilaa.com/orders/add&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall, iptables&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Check listening ports&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Anti-intrusion system,&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SELinux&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
fail2ban&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* http://www.easyweb.com&lt;br /&gt;
* http://www.dreamhost.com/web-hosting/&lt;br /&gt;
* http://wpengine.com/ (wordpress only)&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog user's have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
strong passwords, 2 factor auth,&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-18T19:42:22Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall, iptables&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Check listening ports&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Anti-intrusion system,&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SELinux&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
fail2ban&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog user's have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
strong passwords, 2 factor auth,&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-18T19:41:39Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* High Technical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall, iptables&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Check listening ports&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Anti-intrusion system,&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SELinux&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
fail2ban&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Database hardening'''&lt;br /&gt;
&lt;br /&gt;
A key approach discussed elsewhere in protecting data, both at rest - on disk - and in use - in memory, is to encrypt these data stores either as part of full disk encryption or as individual restricted encrypted mount points.&lt;br /&gt;
&lt;br /&gt;
Below are further guides for specific hardening techniques for the MySQL database system.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips| MySQL Security Best Practices]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://rochakchauhan.com/blog/2013/11/19/security-and-hardening-tips-for-mysql/| Security and Hardening Tips for MySQL]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.securethelock.com/2014/01/09/12-steps-for-hardening-mysql-from-attackers/| 12 steps for Hardening MySQL from Attackers]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Web app'''&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog user's have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
strong passwords, 2 factor auth,&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-18T19:37:38Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* High Technical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall, iptables&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Check listening ports&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Anti-intrusion system,&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SELinux&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
fail2ban&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&lt;br /&gt;
As well as considering the physical server and it's operating system users must thinking in terms of application security. Especially for those applications which either contain sensitive data or those that provide access routes to the machine for an attacker.&lt;br /&gt;
&lt;br /&gt;
Below is a set of guides for Apache webserver hardening.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.tecmint.com/apache-security-tips/| 13 Apache Web Server Security and Hardening Tips]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://xianshield.org/guides/apache2.0guide.html| Apache 2.0 Hardening Guide]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
'''Database'''&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
'''Web app'''&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog user's have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
strong passwords, 2 factor auth,&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-18T18:43:09Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* High Technical */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The user is responsible for detecting and reporting hardware faults on some providers&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*Potential risk of provider, law enforcement or other state forces accessing contents of virtual server without user's awareness.  &lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password brute force&lt;br /&gt;
*Service interruption through denial of service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL man-in-the-middle attacks&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password management''' is the core of any security strategy. For the dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging: the &amp;lt;tt&amp;gt;chaging&amp;lt;/tt&amp;gt; command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In some cases it may be prudent to enabled account locking for accounts that have been under particularly concerted attacks. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]. Great care should be taken when enabling user locking as an attacker can simply deny users access to their own services by intentionally locking an account. Generally it is better practice to ban the attacker before the need for account locking is encountered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default - the &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; package should be installed and all superuser actions should be run through it.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]. Once SSH keys have been set up for all relevant users, disabling password-based logins should be considered. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be up to date. Critical patches are released by software vendors and operating system providers on a regular basis. Updates frequently contain fixes for potential vulnerabilities and bugs, if your system is not up to date it may be at risk. A recent example of this is the SSL bug [https://heartbleed.com HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall, iptables&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Check listening ports&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Anti-intrusion system,&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SELinux&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
fail2ban&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
'''Apache hardening'''&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
'''Database'''&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
'''Web app'''&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog user's have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
strong passwords, 2 factor auth,&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-16T22:37:05Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Mitigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password Bruteforce&lt;br /&gt;
*Service interruption through Denial of Service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL spoofing&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password Management''' is the core of any security strategy. For Dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging, the chaging command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Failed login attempts should result in the locking of the associated user account. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main| Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on Dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be uptodate. Critical patches are released by software vendors and operating system providers on a regular basis. These handle potential exploits, if your system is not uptodate it may be vulnerable. The clearest example of this is the SSL bug [https://heartbleed.com|HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall, iptables&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Check listening ports&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Anti-intrusion system,&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SELinux&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
fail2ban&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Apache'''&lt;br /&gt;
'''Database'''&lt;br /&gt;
'''Web app'''&lt;br /&gt;
brief desc for these three with link to web app guide&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog user's have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
strong passwords, 2 factor auth,&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Choose_a_hosting_provider</id>
		<title>Choose a hosting provider</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Choose_a_hosting_provider"/>
				<updated>2014-05-16T22:36:10Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Mitigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
===Criteria===&lt;br /&gt;
*Price - relative services offered&lt;br /&gt;
*Reputation - are they well known, have they had security breaches or reports of poor support, do they adhere to certain principles inline with that of your organisation - such as data privacy or protection of human rights defenders.&lt;br /&gt;
*Specialisation - do they work in the field of human rights, software applications or general hosting&lt;br /&gt;
*Is mail provided&lt;br /&gt;
*Hardware specifications&lt;br /&gt;
*Operating systems offered&lt;br /&gt;
*Supported provided&lt;br /&gt;
*Readily discusses your security concerns and which security features and processes they offer with their hosting.&lt;br /&gt;
*Provides the most recent stable versions of all server software.&lt;br /&gt;
*Provides reliable methods for backup and recovery.&lt;br /&gt;
*Provides encryption options for hosting of sites or mail&lt;br /&gt;
&lt;br /&gt;
==Secure hosting setups==&lt;br /&gt;
Depending on available skill level the following secure system setups are possible:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==High Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Dedicated Server===&lt;br /&gt;
For a [[Dedicated_Hosting | Dedicated Hosting]] system, the user can either run their own physical hardware or rent this hardware from a provider. The former solution offers total control of the physical hardware, however, there are significant downsides to this approach and should be avoided; it is only recommend under special circumstances such as [[Sensitive_Data | storing sensitive data]]. In the latter case, the hosting agent provides the hardware but the user has total control of the server via remote access. In this scenario, the provider is responsible for replacement of hardware parts that fail or malfunction - this support is generally done through a ticket system and relies on the user to report errors.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*User has total control of the system's software&lt;br /&gt;
*User has total control of access rights&lt;br /&gt;
*User has control of physical network connection, allowing them to whitelist or block connection from allowed or spurious connections&lt;br /&gt;
*Financial cost of hardware malfunction is not an issue as the host is responsible for replacing/repairing failing hardware&lt;br /&gt;
*The host can be chosen to place the server in a different jurisdiction from that of the user to prevent seizure&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*The user does not have physical access to the server&lt;br /&gt;
*The host is not responsible for data loss or downtime if the physical server fails&lt;br /&gt;
*The time taken to repair a hardware malfunction depends on the provider chosen. See [[Choosing_A_Host | Choosing a hosting provider]].&lt;br /&gt;
*The contract can be terminated by the host and access to the server can be terminated or suspended depending on the host's terms of use.&lt;br /&gt;
&lt;br /&gt;
===VPS===&lt;br /&gt;
A Virtual Private Server(VPS) is an instance of a Virtual Operating System running on a much larger server. Typically multiple VPS will be run on a single server. In a VPS environment, you have a dedicated virtual private server but do not control the server on which it is hosted. Resources will be limited, you can not control or harden the outer server.&lt;br /&gt;
&lt;br /&gt;
'''Benefits'''&lt;br /&gt;
*The cost of this type of server will typically be significantly cheaper than a dedicated server&lt;br /&gt;
*Depending on the host, the server will be capable of running most standard server software, up to a certain limit&lt;br /&gt;
*Hardware is managed by the hosting provider unless self hosting&lt;br /&gt;
*If self hosting, a single server can be used for multiple purposes and to provide multiple distinct servers&lt;br /&gt;
&lt;br /&gt;
'''Downsides'''&lt;br /&gt;
*Processing power will be limited over a dedicated server but, depending on the hosting provider, should be capable of running small to medium capacity websites&lt;br /&gt;
*Bandwidth will also be restricted&lt;br /&gt;
*The user will not have access to the outer server and will thus not be able to harden it&lt;br /&gt;
&lt;br /&gt;
===Threats===&lt;br /&gt;
*Social engineering attack&lt;br /&gt;
*Password Bruteforce&lt;br /&gt;
*Service interruption through Denial of Service attack&lt;br /&gt;
*System software exploits&lt;br /&gt;
*SSL spoofing&lt;br /&gt;
*Data loss or data theft&lt;br /&gt;
&lt;br /&gt;
===Mitigation===&lt;br /&gt;
'''Password Management''' is the core of any security strategy. For Dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging, the chaging command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Failed login attempts should result in the locking of the associated user account. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main| Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on Dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Software Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
System software must always be uptodate. Critical patches are released by software vendors and operating system providers on a regular basis. These handle potential exploits, if your system is not uptodate it may be vulnerable. The clearest example of this is the SSL bug [https://heartbleed.com|HeartBleed].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Minimising installed software is an important step in reducing potential vulnerabilities. The system should have the bare minimum of packages and software installed to support its purpose.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''System Management'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Firewall, iptables&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Check listening ports&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Logging and Auditing&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Anti-intrusion system,&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SELinux&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
fail2ban&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''Apache'''&lt;br /&gt;
'''Database'''&lt;br /&gt;
'''Web app'''&lt;br /&gt;
brief desc for these three with link to web app guide&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Intermediary Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
===Hosted platform===&lt;br /&gt;
For organisation that wish to setup their own custom site based on an existing platform such as Wordpress.com, there are a setup of steps that should be taken to ensure a good level of security. The [[Choosing_A_Host | choosing a hosting provider]] guide should also be consulted.&lt;br /&gt;
&lt;br /&gt;
'''Platform Security'''&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Limiting access - Making smart choices that reduce possible entry points available to a malicious person.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containment - Your system should be configured to minimize the amount of damage that can be done in the event that it is compromised.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Preparation and knowledge - Keeping backups and knowing the state of your WordPress installation at regular intervals. Having a plan to backup and recover your installation in the case of catastrophe can help you get back online faster in the case of a problem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Passwords&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File Permissions&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Admin user&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SSL&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
SFTP client&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Platform updates&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Hosting install of pre-built software platform, such as Wordpress,&lt;br /&gt;
&lt;br /&gt;
===Shared Hosting===&lt;br /&gt;
In a [[Shared_Hosting|Shared Hosting]] environment, your and other website owners shared one server. This includes sharing the physical server and the software applications within the server. Shared hosting services are affordable because the cost to operate the server is shared between you and these other owners. There are, however, a number of down sides, such as being slower.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Technical==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For a basic setup providing a content distribution platform such as a blog user's have the option of using existing free services such as Wordpress, Journoportfolio or similar.&lt;br /&gt;
===Threat Mitigation===&lt;br /&gt;
strong passwords, 2 factor auth,&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
==Comparison Matrix==&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;60%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Dedicated Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Virtual Private Server'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Shared Hosting'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| '''Cloud Service'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| High technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Requires Intermediary technical skill&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Intermediary/Basic&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Basic&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows disk/data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows encryption within VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited or no control of data encryption&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on provider but usually not provided&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSH and private key login&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Enforce secure login for VPS&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Login via CPanel or Custom interface - some hosts offer 2 factor auth&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User access control and restriction&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| User control&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via user accounts added through management software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control via management software&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| SSL cert, must setup and provide own cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Allows only shared SSL cert, most host provide shared cert&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Most host platforms will provide SSL support by default&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Total control of applications and software&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Control of software within VM, limited access to hardware depending on type of VM&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Application control only via management interface&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depends on cloud server - certain services with provide data access restrictions but this is a non-ideal scenario&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Manually maintained and updated&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Server is patched but VPS remains responsibility of user&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Patches and updates provided by host - though may lag behind depending on quality of hosting&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on scale of provider - patching and support will be provided to protect their reputation&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Limited supported - hardware support and replacement depending on provider&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to dedicated support&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Support is generally in terms of management software - hardware is automatically monitored by hosts&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Similar to shared though support is specific to the platform hosting&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot;| &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anti-ddos and brute forcing via fail2ban, botnetdbp deployment&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Provider may or may not mitigate DDoS attacks&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| DDoS attacks will receive some or limited mitigation depending on quality of host, generally they will not protect against large scale attacks and may force the website to be removed&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Depending on the provider if the attack crosses their threshold for protection they may shut down the website or ask it to leave&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Secure_hosting_guide|Back to front page]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Secure Hosting]]&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Access_Restrictions</id>
		<title>Access Restrictions</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Access_Restrictions"/>
				<updated>2014-05-16T22:35:04Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Dedicated/VPS Hosting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Restricting access to data based on roles, rights and responsibilities is an integral part of any security policy. It is equally true in the framing of secure hosting.&lt;br /&gt;
&lt;br /&gt;
In this circumstance, access should be clearly separated into roles at different levels. When hosting a web application a separate password and user should be used for database access by the web application. The web application should never have root access to any other domain. In a similar way, real world users should be divided into roles and categories and non-should be granted full root access.&lt;br /&gt;
&lt;br /&gt;
==Dedicated/VPS Hosting==&lt;br /&gt;
&lt;br /&gt;
'''Password Management''' is the core of any security strategy. For Dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging, the chaging command on Linux servers allows checking of password age by user and setting of password aging parameters [http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Failed login attempts should result in the locking of the associated user account. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main| Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on Dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shared Hosting==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''Password Management'''&lt;br /&gt;
For shared hosting password managment is a core defence against attack. The administrator password should fit the criteria above for a strong password - long, variance in characters containing no dictionary words.&lt;br /&gt;
&lt;br /&gt;
As above [https://securityinabox.org/en/keepass_main| Keepass] can be used to generate and store a complex admin password. This has the secondary advantage of limiting access to the admin password to those who are trusted with the Keepass store.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Restrict IP addresses'''&lt;br /&gt;
&lt;br /&gt;
Depending on what version of CPanel your provider offers, it is possible to lock down access via [http://docs.cpanel.net/twiki/bin/view/AllDocumentation/WHMDocs/DenyAccess| Host Access Control] option. This allows you limit access to very specific IP addresses.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''User management'''&lt;br /&gt;
User accounts on a Shared Hosting system should be restricted only to those whose core responsibility is for updating or maintaining the organisations site.&lt;br /&gt;
Access information should, however, also be stored by the Organisation as part of their regular backups - in the event that the responsible party leaves the Organisation.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Access_Restrictions</id>
		<title>Access Restrictions</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Access_Restrictions"/>
				<updated>2014-05-16T22:34:47Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Dedicated/VPS Hosting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Restricting access to data based on roles, rights and responsibilities is an integral part of any security policy. It is equally true in the framing of secure hosting.&lt;br /&gt;
&lt;br /&gt;
In this circumstance, access should be clearly separated into roles at different levels. When hosting a web application a separate password and user should be used for database access by the web application. The web application should never have root access to any other domain. In a similar way, real world users should be divided into roles and categories and non-should be granted full root access.&lt;br /&gt;
&lt;br /&gt;
==Dedicated/VPS Hosting==&lt;br /&gt;
&lt;br /&gt;
'''Password Management''' is the core of any security strategy. For Dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging, the chaging command on Linux servers allows checking of password age by user and setting of password aging parameters[http://linoxide.com/linux-command/password-expire-chage-command/| link].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Failed login attempts should result in the locking of the associated user account. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main| Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on Dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shared Hosting==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''Password Management'''&lt;br /&gt;
For shared hosting password managment is a core defence against attack. The administrator password should fit the criteria above for a strong password - long, variance in characters containing no dictionary words.&lt;br /&gt;
&lt;br /&gt;
As above [https://securityinabox.org/en/keepass_main| Keepass] can be used to generate and store a complex admin password. This has the secondary advantage of limiting access to the admin password to those who are trusted with the Keepass store.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Restrict IP addresses'''&lt;br /&gt;
&lt;br /&gt;
Depending on what version of CPanel your provider offers, it is possible to lock down access via [http://docs.cpanel.net/twiki/bin/view/AllDocumentation/WHMDocs/DenyAccess| Host Access Control] option. This allows you limit access to very specific IP addresses.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''User management'''&lt;br /&gt;
User accounts on a Shared Hosting system should be restricted only to those whose core responsibility is for updating or maintaining the organisations site.&lt;br /&gt;
Access information should, however, also be stored by the Organisation as part of their regular backups - in the event that the responsible party leaves the Organisation.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Access_Restrictions</id>
		<title>Access Restrictions</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Access_Restrictions"/>
				<updated>2014-05-16T22:33:05Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: /* Dedicated/VPS Hosting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Restricting access to data based on roles, rights and responsibilities is an integral part of any security policy. It is equally true in the framing of secure hosting.&lt;br /&gt;
&lt;br /&gt;
In this circumstance, access should be clearly separated into roles at different levels. When hosting a web application a separate password and user should be used for database access by the web application. The web application should never have root access to any other domain. In a similar way, real world users should be divided into roles and categories and non-should be granted full root access.&lt;br /&gt;
&lt;br /&gt;
==Dedicated/VPS Hosting==&lt;br /&gt;
&lt;br /&gt;
'''Password Management''' is the core of any security strategy. For Dedicated and VPS hosting options, there are several modes of control that administrator can apply.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Enforce strong password - a strong password should contain Upper and Lower case characters, Numbers and Special Characters and should be long; greater than 20 characters. It is also possible to restrict the use of previously used passwords. On Linux systems the following command can be used to force complex passwords for users:&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 password required pam_cracklib.so minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1&lt;br /&gt;
&lt;br /&gt;
For more detail, refer to the guide [http://www.linux-faqs.info/security/force-strong-passwords| Force strong passwords]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use password aging, the chaging command on Linux servers allows checking of password age by user and setting of password aging parameters[link for tutorial on chaging]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Failed login attempts should result in the locking of the associated user account. On Linux systems, the faillog command can be used to check failures and to set failure limits. For more details see [http://www.cyberciti.biz/tips/rhel-centos-fedora-linux-log-failed-login.html| Faillog]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Use Password Management software - a tool such as Keepass, or KeepassX for Linux and Mac, allows users to easily generate, store and mange complex difficult to crack passwords. Refer to this guide for details on [https://securityinabox.org/en/keepass_main| Keepass]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
'''User Management''' on Dedicated or VPS systems allow administrators fine grained control of user login and access permissions.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Root user login should be disabled by default&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Secure Shell(SSH) login should be forced, telnet and ftp login access should be disabled by default. To upload files to the server securely user can use Secure FTP(SFTP) clients. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Private keys should be used for SSH login access. The following guide gives details on generating and setting up public/private keys for SSH login, [http://support.suso.com/supki/SSH_Tutorial_for_Linux| SSH tutorial]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
File permissions should be restricted for critical files. User should only be allowed access to files relevant to their work. Execution as root should be restricted. Discussion of [http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions| linux file permissions].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shared Hosting==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''Password Management'''&lt;br /&gt;
For shared hosting password managment is a core defence against attack. The administrator password should fit the criteria above for a strong password - long, variance in characters containing no dictionary words.&lt;br /&gt;
&lt;br /&gt;
As above [https://securityinabox.org/en/keepass_main| Keepass] can be used to generate and store a complex admin password. This has the secondary advantage of limiting access to the admin password to those who are trusted with the Keepass store.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''Restrict IP addresses'''&lt;br /&gt;
&lt;br /&gt;
Depending on what version of CPanel your provider offers, it is possible to lock down access via [http://docs.cpanel.net/twiki/bin/view/AllDocumentation/WHMDocs/DenyAccess| Host Access Control] option. This allows you limit access to very specific IP addresses.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''User management'''&lt;br /&gt;
User accounts on a Shared Hosting system should be restricted only to those whose core responsibility is for updating or maintaining the organisations site.&lt;br /&gt;
Access information should, however, also be stored by the Organisation as part of their regular backups - in the event that the responsible party leaves the Organisation.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Geography,_lesgislation_and_terms_of_service</id>
		<title>Geography, lesgislation and terms of service</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Geography,_lesgislation_and_terms_of_service"/>
				<updated>2014-05-16T22:31:21Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For Activists, Journalists, NGOs or any Civil Society online participants, legal and geographic jurisdiction should be forefront when considering where to host their websites.&lt;br /&gt;
&lt;br /&gt;
==Legal Jurisdictions==&lt;br /&gt;
The Internet has introduced a dislocated sense of legal jurisdiction, in some cases the problem of applying one countries laws to a different jurisdiction is not a new conception. Over time many countries have developed contracts, treaties and agreements with other states governing extradition of individuals who are wanted for breach of one country's legal code but are currently residing in another country. &lt;br /&gt;
&lt;br /&gt;
There have been a number of cases in the last decade ranging from extremely high profile, Julian Assange and Edward Snowden, to limited attention paid, [https://en.wikipedia.org/wiki/Gary_McKinnon| Gary McKinnion].&lt;br /&gt;
&lt;br /&gt;
In many countries a core weapon used for censorship, oppression and repression is the judiciary and the enacting or novel use of laws designed to restrict freedoms. This is a very effective tactic and the results can be seen in countries such as Vietnam where a number of individuals have been tried for publishing material consider by the authorities to be illegal; either because of content - deemed anti-governmental - or method of publishing - publication under pseudonyms.&lt;br /&gt;
&lt;br /&gt;
Publication within the Jurisdiction of a given country can leave the publishers open to legal punishment.&lt;br /&gt;
&lt;br /&gt;
Ultimately, hosting a site in a different political or legal jurisdiction can not prevent recriminations against journalist, organisation or activists with country. It can prevent the ability to physical take the site or publication offline.&lt;br /&gt;
&lt;br /&gt;
This can be hampered in part by the use of intermediary resellers. For example, in the case of Cambodia hosting platforms are located outside of the country, however, access to these services is done through local resellers who are subject to Cambodian law. These resellers are chosen largely for language and immediacy of access to support.&lt;br /&gt;
&lt;br /&gt;
In determining the current laws that are applied or may be applied to your work or your locale there are a number of resources provided by monitoring groups that can be used as a starting point. This information is far from complete and is often only able to report on what legal tools have been used in the past.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://defendersdays.civilrightsdefenders.org/| Civil Rights Defenders]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.iltb.net/| Indian Law and Technology blog]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.openrightsgroup.org/| Open Rights Group]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[https://supporters.eff.org/| Electronic Frontier Foundation (EFF)]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[https://www.cpj.org/| Committee to protect Journalists]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://freedomhouse.org/| Freedom House]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://witness.org/| Witness]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.frontlinedefenders.org/| Frontline Defenders]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[http://www.lwob.org/Pages/Default.aspx| Lawyers without Borders]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[https://iscproject.org/country-assessments/| ISC Project]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Many countries have specialised legal aide and free legal advice centres that can be contacted to help determine what laws may apply to your work&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Geographic Areas==&lt;br /&gt;
&lt;br /&gt;
Locating a server within a groups own geographic area, where their adversary is the authority or power groups within that geography will leave the site open to infrastructural attacks or censorship. &lt;br /&gt;
&lt;br /&gt;
As the site is located within the country's own infrastructure it is subject to all censorship applied by the state, ISP or national gateway.&lt;br /&gt;
&lt;br /&gt;
==Publishing and Content Legislation==&lt;br /&gt;
&lt;br /&gt;
Censorship through legal means is a prevalent form of suppression and a cause of self censorship. It is extremely important that organisations, journalists and individual take responsibility for their own education in terms of awareness of new digital laws as well as past applications and precedents set in prosecution.&lt;br /&gt;
&lt;br /&gt;
==Terms and Conditions==&lt;br /&gt;
&lt;br /&gt;
Carefully choice should be made in terms of the provider themselves. A strong reputation for support, quality and security is important but as to is alignment with your organisations goals.&lt;br /&gt;
&lt;br /&gt;
Ultimately, a contract is agreed between your organisation and the service provider. This contract governs how, when, and under what circumstances service will or won't be provided. &lt;br /&gt;
&lt;br /&gt;
If your provider has a history of discontinuing service to activists, journalist or civil society groups, or request that they self censor - then it is important to establish this at the outset. It is necessary to determine with your provider what content they might prohibit or what rules govern the extent to which they will support activists in publishing their work.&lt;br /&gt;
&lt;br /&gt;
There are already a number of service providers that aim to support the activists, NGO and non-profit world. Amongst them are [https://greenhost.net/about-us/| Green Host], [https://help.riseup.net/en/about-us| Riseup] and [https://leap.se/en/about-us| Leap].&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Geography,_lesgislation_and_terms_of_service</id>
		<title>Geography, lesgislation and terms of service</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Geography,_lesgislation_and_terms_of_service"/>
				<updated>2014-05-16T21:45:03Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For Activists, Journalists, NGOs or any Civil Society online participants, legal and geographic jurisdiction should be forefront when considering where to host their websites.&lt;br /&gt;
&lt;br /&gt;
==Legal Jurisdictions==&lt;br /&gt;
The Internet has introduced a dislocated sense of legal jurisdiction, in some cases the problem of applying one countries laws to a different jurisdiction is not a new conception. Over time many countries have developed contracts, treaties and agreements with other states governing extradition of individuals who are wanted for breach of one country's legal code but are currently residing in another country. &lt;br /&gt;
&lt;br /&gt;
There have been a number of cases in the last decade ranging from extremely high profile, Julian Assange and Edward Snowden, to limited attention paid, [https://en.wikipedia.org/wiki/Gary_McKinnon| Gary McKinnion].&lt;br /&gt;
&lt;br /&gt;
In many countries a core weapon used for censorship, oppression and repression is the judiciary and the enacting or novel use of laws designed to restrict freedoms. This is a very effective tactic and the results can be seen in countries such as Vietnam where a number of individuals have been tried for publishing material consider by the authorities to be illegal; either because of content - deemed anti-governmental - or method of publishing - publication under pseudonyms.&lt;br /&gt;
&lt;br /&gt;
Publication within the Jurisdiction of a given country can leave the publishers open to legal punishment.&lt;br /&gt;
&lt;br /&gt;
Ultimately, hosting a site in a different political or legal jurisdiction can not prevent recriminations against journalist, organisation or activists with country. It can prevent the ability to physical take the site or publication offline.&lt;br /&gt;
&lt;br /&gt;
This can be hampered in part by the use of intermediary resellers. For example, in the case of Cambodia hosting platforms are located outside of the country, however, access to these services is done through local resellers who are subject to Cambodian law. These resellers are chosen largely for language and immediacy of access to support.&lt;br /&gt;
&lt;br /&gt;
==Geographic Areas==&lt;br /&gt;
&lt;br /&gt;
Locating a server within a groups own geographic area, where their adversary is the authority or power groups within that geography will leave the site open to infrastructural attacks or censorship. &lt;br /&gt;
&lt;br /&gt;
As the site is located within the country's own infrastructure it is subject to all censorship applied by the state, ISP or national gateway.&lt;br /&gt;
&lt;br /&gt;
==Publishing and Content Legislation==&lt;br /&gt;
&lt;br /&gt;
Censorship through legal means is a prevalent form of suppression and a cause of self censorship. It is extremely important that organisations, journalists and individual take responsibility for their own education in terms of awareness of new digital laws as well as past applications and precedents set in prosecution.&lt;br /&gt;
&lt;br /&gt;
==Terms and Conditions==&lt;br /&gt;
&lt;br /&gt;
Carefully choice should be made in terms of the provider themselves. A strong reputation for support, quality and security is important but as to is alignment with your organisations goals.&lt;br /&gt;
&lt;br /&gt;
Ultimately, a contract is agreed between your organisation and the service provider. This contract governs how, when, and under what circumstances service will or won't be provided. &lt;br /&gt;
&lt;br /&gt;
If your provider has a history of discontinuing service to activists, journalist or civil society groups, or request that they self censor - then it is important to establish this at the outset. It is necessary to determine with your provider what content they might prohibit or what rules govern the extent to which they will support activists in publishing their work.&lt;br /&gt;
&lt;br /&gt;
There are already a number of service providers that aim to support the activists, NGO and non-profit world. Amongst them are [https://greenhost.net/about-us/| Green Host], [https://help.riseup.net/en/about-us| Riseup] and [https://leap.se/en/about-us| Leap].&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	<entry>
		<id>https://learn.equalit.ie/wiki/Secure_connections</id>
		<title>Secure connections</title>
		<link rel="alternate" type="text/html" href="https://learn.equalit.ie/wiki/Secure_connections"/>
				<updated>2014-05-16T21:36:55Z</updated>
		
		<summary type="html">&lt;p&gt;Bill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When communicating data to/from a server it is important that the infromation not be susceptible to man-in-the-middle attacks. If data is communicated over open, plain text mediums such as FTP or HTTP then that data can be intercepted and read by any entity on any of the networks that the information passes through; this can included Local Area Networks, ISPs, or National Entities&lt;br /&gt;
&lt;br /&gt;
There are a number of steps that can be taken to protect communication channels to and from the server, though no system is 100% secure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''SSL'''&lt;br /&gt;
If your website does not have an SSL certificate then all web traffic direct to your site will be unencrypted and potentially subject to snooping. &lt;br /&gt;
&lt;br /&gt;
Secure Socket Layer(SSL) is a cryptographic protocol which allows secure client-server interactions. Once a secure session has been established between the client, for example your web browser, and the server, your website in this case, all the information that passes between the two is unreadable to external parties.&lt;br /&gt;
&lt;br /&gt;
In order, to provide SSL for your website you must purchase an SSL certificate. This is a digital document that is signed by a recognised certificate reseller that uniquely belongs to your domain. &lt;br /&gt;
&lt;br /&gt;
An added benefit of SSL certificates is that they can aid in preventing SSL spoofing. This occurs where a malicious websites pretend to be a legitimate website or a server pretends to be a legitimate holder of the SSL cert. &lt;br /&gt;
&lt;br /&gt;
Most modern browsers will give a warning if an SSL cert has expired or is invalid - as in that it may be a spoof certificate.&lt;br /&gt;
&lt;br /&gt;
One of the most commonly used SSL software packages on the Internet, OpenSSL, suffered a major security flaw in the shape of the [http://heartbleed.com/| Heart Bleed bug]. This left most websites using a certain version of OpenSSL open to an exploit. This incident highlights that no technology is 100% secure and requires constant monitoring.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''SFTP'''&lt;br /&gt;
When transfering files to or from a remote server it is integral to security to use an SFTP client. This stands for Secure File Tranfer Protocol. In a similar manner to SSL it ensures that the communications to and from the server are not open to external individuals.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''SSH'''&lt;br /&gt;
When connecting directly to a server, for example for command line access, it is imperative to use the Secure SHell protocol. As the telnet protocol provides no level of security and should be disabled. For further information see []&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill</name></author>	</entry>

	</feed>