I was curious about their &quot;encryption&quot; since they seem to emphasize it a lot.<p><a href="https:&#x2F;&#x2F;www.stackfield.com&#x2F;security" rel="nofollow">https:&#x2F;&#x2F;www.stackfield.com&#x2F;security</a><p>This page indicates they&#x27;re using RSA-2048 and AES-256. Wow, that&#x27;s so vague. So I signed up.<p>It&#x27;s using Javascript Cryptography, which is never a good sign: <a href="https:&#x2F;&#x2F;www.nccgroup.trust&#x2F;us&#x2F;about-us&#x2F;newsroom-and-events&#x2F;blog&#x2F;2011&#x2F;august&#x2F;javascript-cryptography-considered-harmful&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.nccgroup.trust&#x2F;us&#x2F;about-us&#x2F;newsroom-and-events&#x2F;b...</a><p>Their RSA implementation is vulnerable to a padding oracle attack (Bleichenbacher&#x27;s 1998 attack):<p><a href="https:&#x2F;&#x2F;www.stackfield.com&#x2F;Scripts&#x2F;Plugins&#x2F;rsa.20160122054154.min.js" rel="nofollow">https:&#x2F;&#x2F;www.stackfield.com&#x2F;Scripts&#x2F;Plugins&#x2F;rsa.2016012205415...</a><p><a href="https:&#x2F;&#x2F;www.stackfield.com&#x2F;Scripts&#x2F;Plugins&#x2F;rsa2.20160122054154.min.js" rel="nofollow">https:&#x2F;&#x2F;www.stackfield.com&#x2F;Scripts&#x2F;Plugins&#x2F;rsa2.201601220541...</a><p>They&#x27;re using AES-CTR, but they&#x27;re not authenticating the ciphertext.<p><a href="https:&#x2F;&#x2F;www.stackfield.com&#x2F;Scripts&#x2F;sf.wssecurity.20160122054154.min.js" rel="nofollow">https:&#x2F;&#x2F;www.stackfield.com&#x2F;Scripts&#x2F;sf.wssecurity.20160122054...</a><p>(JSBeautifier comes to the rescue:)<p><pre><code>    function DecryptOrganisationByMaster(e, a) {
        if (e === undefined || e.MyOrgRoleId === 3) {
            return false
        }
        var b = e.EncryptionCode,
            c = e.EncryptedCode;
        if (b === undefined || c === undefined || b === &quot;&quot; || c === &quot;&quot;) {
            return false
        }
        if (OrganisationPasswords[e.OrgId] !== undefined) {
            return true
        }
        var d = Aes.Ctr.decrypt(c, a, 256);
        if (d === b) {
            OrganisationPasswords[e.OrgId] = a;
            return true
        }
        return false
    }
</code></pre>
This really should have been reviewed by a cryptographer before being branded so heavily as an &quot;encryption&quot; solution.<p>EDIT: Also, their Aes.Ctr.encrypt() function doesn&#x27;t accept a nonce:<p><a href="https:&#x2F;&#x2F;www.stackfield.com&#x2F;Scripts&#x2F;Plugins&#x2F;jquery.aes.20160122054154.min.js" rel="nofollow">https:&#x2F;&#x2F;www.stackfield.com&#x2F;Scripts&#x2F;Plugins&#x2F;jquery.aes.201601...</a><p>See <a href="https:&#x2F;&#x2F;gist.github.com&#x2F;paragonie-scott&#x2F;53428f0947337d66a786" rel="nofollow">https:&#x2F;&#x2F;gist.github.com&#x2F;paragonie-scott&#x2F;53428f0947337d66a786</a>