[aerogear-dev] Question around encryption for iOS push certificate passphrase
Matthias Wessendorf
matzew at apache.org
Wed Feb 5 14:47:23 EST 2014
On Wed, Feb 5, 2014 at 8:00 PM, Bruno Oliveira <bruno at abstractj.org> wrote:
> There is no magic, the password must exist in some place. If not possible
> require the password, is possible to follow the same approach provided for
> password reset functionality.
>
> If you want to stick to the KeyStore, you still need to provide the
> password in some place, but that's more suitable when you have a key
> exchange or something like this.
>
> So if you patiently read my the code proposed, you will realize that is
> possible to achieve it via property file, database or whatever:
>
> @Test
> public void testPasswordValidationWithRandomSaltProvided() throws
> Exception {
> Pbkdf2 pbkdf2 = AeroGearCrypto.pbkdf2();
> byte[] salt = new Random().randomBytes();
> byte[] IV = new Random().randomBytes();
> int iterations = 100000;
>
> read.secretFile("secret.properties");
> String PASSWORD = read.load("password_to_my_superpassphrase");
>
yeah, but that is really per variant, not global. So we would need a lot of
these secret file :-)
So, the passphrase is upload to the server (for all iOS variants), w/ this
HTTP request:
http://aerogear.org/docs/specs/aerogear-push-rest/Variants/iOS/
Somewhen later a totally different system submits a HTTP request to trigger
the PUSH message delivery:
http://aerogear.org/docs/specs/aerogear-push-rest/Sender/
And internally, only for iOS variant, all it needs is the certificate (from
the apple developer portal) + its passphrase
Perhaps I am wrong, but I feel that if (for iOS variants) we start to
require "password_to_my_superpassphrase" on the request for creating the
logical construct of the variant,
and use the same for the Sender, we would have that magical password, but I
fear that this opens a new can of worms.
>
> //Encrypt step
> SecretKey secretKey = pbkdf2.generateSecretKey(PASSWORD, salt,
> iterations);
> CryptoBox box1 = new CryptoBox(secretKey.getEncoded());
> String passphrase = "My bonnie lies over the ocean";
> byte[] ciphertext = box1.encrypt(IV, passphrase.getBytes());
>
> //Decrypt step
> SecretKey recoveredKey = pbkdf2.generateSecretKey(PASSWORD, salt,
> iterations);
> }
>
> If it's not clear, let me know where should I introduce this functionality
> rather than a pet project and I can do that.
>
The AGPUSH-358 ticket is still yours :-) I just felt looking at it, while
reading up on our crypto bits.
>
> --
> abstractj
>
> On February 5, 2014 at 4:47:04 PM, Matthias Wessendorf (matzew at apache.org)
> wrote:
> > > as said in the comments, I don't have that PASSWORD here
> >
> >
> > That is only submitted when the user creates a new iOS variant,
> > it's never entered when the server tries to connect to the APNs
>
>
--
Matthias Wessendorf
blog: http://matthiaswessendorf.wordpress.com/
sessions: http://www.slideshare.net/mwessendorf
twitter: http://twitter.com/mwessendorf
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/aerogear-dev/attachments/20140205/cce32c16/attachment.html
More information about the aerogear-dev
mailing list