You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltaspike.apache.org by "Mark Struberg (JIRA)" <ji...@apache.org> on 2017/05/11 17:05:04 UTC

[jira] [Commented] (DELTASPIKE-1250) create a master/client encryption handling

    [ https://issues.apache.org/jira/browse/DELTASPIKE-1250?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16006784#comment-16006784 ] 

Mark Struberg commented on DELTASPIKE-1250:
-------------------------------------------

A first design proposal can be found on my github repo https://github.com/struberg/deltaspike/tree/DELTASPIKE-1250

Will now add a main method to generate the master password and encrypt content

> create a master/client encryption handling
> ------------------------------------------
>
>                 Key: DELTASPIKE-1250
>                 URL: https://issues.apache.org/jira/browse/DELTASPIKE-1250
>             Project: DeltaSpike
>          Issue Type: New Feature
>          Components: Configuration
>    Affects Versions: 1.7.2
>            Reporter: Mark Struberg
>            Assignee: Mark Struberg
>             Fix For: 1.8.0
>
>
> For storing passwords in our configuration I'd like to implement a 2 stage approach to symmetric encryption.
> The current ideas is to have an encrypted has derived from a master password and box-locale information (MAC, IP, expiry date, etc).
> This encrypted sequence is different on every box. But the decrypted hash is not.
>  
> With this hash we can encode a user password, which is then ofc the same on different boxes. 
> Of course all that is just security by obscurity, but it's still much better than plaintext and even close to vault.
> After all, the only really secure way is using a hardware crypto box plus the user has to manually provide a password and not using static passwords but 1-time consumable tokens.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Re: [jira] [Commented] (DELTASPIKE-1250) create a master/client encryption handling

Posted by Romain Manni-Bucau <rm...@gmail.com>.
2017-05-12 13:16 GMT+02:00 Mark Struberg <st...@yahoo.de.invalid>:

> Well, not 100% d'accord.
>
> Of course it is just a split-secret security.
> Parts of the secret are in a file, others in the application.
> An attacker would need to gather
> * the master.hash file
> * the application (or at least the masterSalt text or algorithm)
> * the encrypted date (Database etc).
>
> So he actually needs quite some access already!
> This is surely better than a cleartext password stored in the database
> which everyone could see.
>
> But of course, once an attacker comes over the debug port, etc - then ALL
> security is gone.
> I think our approach is not much behing Hashicorp Vault in that regard
> (you could btw also gather parts of the secret from a remote box in your
> code).
> After all the ONLY secure system is if you have a HSM (a hardware security
> device) which has it's OWN pin entry (!) AND you only access the
> information via a consumable 1-time security token.
> But as long as e.g. the database is just secured with a static text
> (username/password) then everything else is mathematically breakable.
>
> Still there is imo a HUGE difference between a cleartext password and a
> split-secret approach.
>

Nop, not theorically. I understand it feels different, kind of "oh a
password" vs "what's that text?" but if you have accesses to read the clear
password then the encrypted one is as easy to get. All this security relies
on the local access (which gives you access to the files, db etc...), all
other things put around is cosmetic to make people comfortable with it.
More it is split longer it will be to get but since the algo is predictable
then not more secured until you rotate the strategy very often, like each
minute.


>
> LieGrue,
> strub
>
> > Am 12.05.2017 um 13:06 schrieb Romain Manni-Bucau <rmannibucau@gmail.com
> >:
> >
> > I think until we support a hsm strategy- which relies on infra more than
> > encryption - we can just put it all in clear, security level will be 1-1.
> > So IMHO it is really "do people feel more comfortable with unclear text
> > even if it is as secured as clear text". If we start to go until "if I'm
> in
> > the app" then the security is compromished anyway even if it is sha
> etc...
> >
> > So concretely I think it is fine but if the proposed action is just to
> move
> > to sha-256 or another impl it doesnt hurt much to do, if the action is
> more
> > impacting like creating 1000 files of 1M with a very specific stratégy to
> > read a byte in each of them depending the file timestamp and jumping on a
> > leg I'm not sure it does worth it since the assumption to access the
> clear
> > password is exactly the same as having it in clear.
> >
> > makes sense?
> >
> >
> >
> > Romain Manni-Bucau
> > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > <http://rmannibucau.wordpress.com> | Github <https://github.com/
> rmannibucau> |
> > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> > <https://javaeefactory-rmannibucau.rhcloud.com>
> >
> > 2017-05-12 12:57 GMT+02:00 Mark Struberg <st...@yahoo.de.invalid>:
> >
> >> Btw, the date, etc should of course _not_ get handed over as masterSalt
> in
> >> cleartext!
> >> If someone would debug the app (also stealing the jars) then a string
> like
> >> "my app-2017-05-12-192.168.4.123
> >> Then it would be easily recognisable how the pattern looks like.
> >> But if you just apply a sha1 on that string, then nobody could tell what
> >> is behind is. And you could hie this information pretty well in your
> >> application somewhere.
> >>
> >> Of course that does still not create absolute security (there is no such
> >> thing like an absolute security).
> >> But an attacker would need
> >> * the actual encrypted secret information string
> >> * the ~/.deltaspike/master.hash file (or wherever you store it, this is
> >> just the default)
> >> * the fully running application (with most business applications this is
> >> not as easy as it sounds - try to install a big app on some fresh
> server...)
> >> * the algorithm of the masterSalt.
> >>
> >>
> >> LieGrue,
> >> strub
> >>
> >>
> >>
> >>> Am 12.05.2017 um 12:31 schrieb Mark Struberg <struberg@yahoo.de.INVALID
> >>> :
> >>>
> >>> Txs Rudy, any help is welcome!
> >>>
> >>>
> >>>> - Why hashing with SHA-1
> >>>
> >>> I guess you mean the master hash?
> >>>
> >>> Oki, there are 3 encryption tokens in place:
> >>>
> >>> 1.) The master password provided by the user in the CLI when creating
> >> the master password (writing the CLI right now):
> >>>
> >>> $> java -jar apache-deltaspike-core-impl.jar encode -masterPassword
> >> myMasterPassword -masterSalt someSecretOnlyKnownToMeAndTheApplication
> >>>
> >>> The masterPassword does NOT get stored anywhere. Neither in plain text
> >> nor encrypted. It's _only_ known to the user who creates the masterHas.
> >>>
> >>> 2.) The masterPassword ("myMasterPassword") gets hashed and THIS will
> be
> >> used to encrypt/decrypt the user passwords in the end.
> >>> Of course the hash does _not_ get stored directly but only encrypted
> via
> >> the master Salt ("someSecretOnlyKnownToMeAndTheApplication").
> >>> The key in the ~/.deltaspike/master.hash properties file is the the
> hash
> >> hashed again: effectively hash(hash(masterPassword)). That way you
> cannot
> >> get back from the key in the master.hash file to the key used to decrypt
> >> the hash of the masterPassword
> >>>
> >>> 3.) the hash of the masterPassword (as stored in the master.hash file
> >> encrypted via the masterSalt) is then used to encrypt/decrypt the actual
> >> security, e.g. a jdbc.user.password.
> >>> There is again a CLI to encode it
> >>> $> java -jar apache-deltaspike-core-impl.jar encode -plaintext
> >> ThisIsMyDatabasePassword -masterSalt someSecretOnlyKnownToMeAndTheA
> >> pplication
> >>>
> >>>
> >>>
> >>> To give more protection, the masterSalt is only known to the
> >> administrator and the application. This could also include installation
> >> dependent information like the MAC address, the UID of the /dev/sda
> disk,
> >> etc. Even the current day! That way you can force a master password hash
> >> which is only valid for a single day, of course without having to
> >> re-encrypted information stored somewhere in your DB etc. every day.
> >>>
> >>>
> >>> Makes sense?
> >>>
> >>> LieGrue,
> >>> strub
> >>>
> >>>
> >>>
> >>>
> >>>> - When I use AES, I always use an Initialization Vector (IV) and
> specify
> >>>> the Block mode and padding.
> >>>
> >>>
> >>> Glad to improve that part!
> >>>
> >>>
> >>>> Am 11.05.2017 um 21:11 schrieb Rudy De Busscher <
> rdebusscher@gmail.com
> >>> :
> >>>>
> >>>> Hi Mark,
> >>>>
> >>>> As I'm working lately quite a lot with security and encryption, I was
> >>>> interested in your implementation.
> >>>>
> >>>> I don't have the time today to look into details, but I already have
> >> some
> >>>> questions
> >>>>
> >>>> - Why hashing with SHA-1 (not a secure hashing algorithm anymore). Why
> >> the
> >>>> additional hashing (before AES encryption) as you mention that we try
> >> only
> >>>> to 'obscure'.
> >>>> - When I use AES, I always use an Initialization Vector (IV) and
> specify
> >>>> the Block mode and padding.
> >>>>
> >>>> I'll try to find some time this weekend to study the code in detail.
> >>>>
> >>>> best regards
> >>>> Rudy
> >>>>
> >>>>
> >>>> On 11 May 2017 at 19:05, Mark Struberg (JIRA) <ji...@apache.org>
> wrote:
> >>>>
> >>>>>
> >>>>>  [ https://issues.apache.org/jira/browse/DELTASPIKE-1250?
> >>>>> page=com.atlassian.jira.plugin.system.issuetabpanels:
> comment-tabpanel&
> >>>>> focusedCommentId=16006784#comment-16006784 ]
> >>>>>
> >>>>> Mark Struberg commented on DELTASPIKE-1250:
> >>>>> -------------------------------------------
> >>>>>
> >>>>> A first design proposal can be found on my github repo
> >>>>> https://github.com/struberg/deltaspike/tree/DELTASPIKE-1250
> >>>>>
> >>>>> Will now add a main method to generate the master password and
> encrypt
> >>>>> content
> >>>>>
> >>>>>> create a master/client encryption handling
> >>>>>> ------------------------------------------
> >>>>>>
> >>>>>>              Key: DELTASPIKE-1250
> >>>>>>              URL: https://issues.apache.org/
> >>>>> jira/browse/DELTASPIKE-1250
> >>>>>>          Project: DeltaSpike
> >>>>>>       Issue Type: New Feature
> >>>>>>       Components: Configuration
> >>>>>> Affects Versions: 1.7.2
> >>>>>>         Reporter: Mark Struberg
> >>>>>>         Assignee: Mark Struberg
> >>>>>>          Fix For: 1.8.0
> >>>>>>
> >>>>>>
> >>>>>> For storing passwords in our configuration I'd like to implement a 2
> >>>>> stage approach to symmetric encryption.
> >>>>>> The current ideas is to have an encrypted has derived from a master
> >>>>> password and box-locale information (MAC, IP, expiry date, etc).
> >>>>>> This encrypted sequence is different on every box. But the decrypted
> >>>>> hash is not.
> >>>>>>
> >>>>>> With this hash we can encode a user password, which is then ofc the
> >> same
> >>>>> on different boxes.
> >>>>>> Of course all that is just security by obscurity, but it's still
> much
> >>>>> better than plaintext and even close to vault.
> >>>>>> After all, the only really secure way is using a hardware crypto box
> >>>>> plus the user has to manually provide a password and not using static
> >>>>> passwords but 1-time consumable tokens.
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> This message was sent by Atlassian JIRA
> >>>>> (v6.3.15#6346)
> >>>>>
> >>>
> >>
> >>
>
>

Re: [jira] [Commented] (DELTASPIKE-1250) create a master/client encryption handling

Posted by Mark Struberg <st...@yahoo.de.INVALID>.
Well, not 100% d'accord. 

Of course it is just a split-secret security. 
Parts of the secret are in a file, others in the application.
An attacker would need to gather
* the master.hash file
* the application (or at least the masterSalt text or algorithm)
* the encrypted date (Database etc).

So he actually needs quite some access already!
This is surely better than a cleartext password stored in the database which everyone could see.

But of course, once an attacker comes over the debug port, etc - then ALL security is gone. 
I think our approach is not much behing Hashicorp Vault in that regard (you could btw also gather parts of the secret from a remote box in your code). 
After all the ONLY secure system is if you have a HSM (a hardware security device) which has it's OWN pin entry (!) AND you only access the information via a consumable 1-time security token.
But as long as e.g. the database is just secured with a static text (username/password) then everything else is mathematically breakable.

Still there is imo a HUGE difference between a cleartext password and a split-secret approach.

LieGrue,
strub

> Am 12.05.2017 um 13:06 schrieb Romain Manni-Bucau <rm...@gmail.com>:
> 
> I think until we support a hsm strategy- which relies on infra more than
> encryption - we can just put it all in clear, security level will be 1-1.
> So IMHO it is really "do people feel more comfortable with unclear text
> even if it is as secured as clear text". If we start to go until "if I'm in
> the app" then the security is compromished anyway even if it is sha etc...
> 
> So concretely I think it is fine but if the proposed action is just to move
> to sha-256 or another impl it doesnt hurt much to do, if the action is more
> impacting like creating 1000 files of 1M with a very specific stratégy to
> read a byte in each of them depending the file timestamp and jumping on a
> leg I'm not sure it does worth it since the assumption to access the clear
> password is exactly the same as having it in clear.
> 
> makes sense?
> 
> 
> 
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://blog-rmannibucau.rhcloud.com> | Old Blog
> <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> <https://javaeefactory-rmannibucau.rhcloud.com>
> 
> 2017-05-12 12:57 GMT+02:00 Mark Struberg <st...@yahoo.de.invalid>:
> 
>> Btw, the date, etc should of course _not_ get handed over as masterSalt in
>> cleartext!
>> If someone would debug the app (also stealing the jars) then a string like
>> "my app-2017-05-12-192.168.4.123
>> Then it would be easily recognisable how the pattern looks like.
>> But if you just apply a sha1 on that string, then nobody could tell what
>> is behind is. And you could hie this information pretty well in your
>> application somewhere.
>> 
>> Of course that does still not create absolute security (there is no such
>> thing like an absolute security).
>> But an attacker would need
>> * the actual encrypted secret information string
>> * the ~/.deltaspike/master.hash file (or wherever you store it, this is
>> just the default)
>> * the fully running application (with most business applications this is
>> not as easy as it sounds - try to install a big app on some fresh server...)
>> * the algorithm of the masterSalt.
>> 
>> 
>> LieGrue,
>> strub
>> 
>> 
>> 
>>> Am 12.05.2017 um 12:31 schrieb Mark Struberg <struberg@yahoo.de.INVALID
>>> :
>>> 
>>> Txs Rudy, any help is welcome!
>>> 
>>> 
>>>> - Why hashing with SHA-1
>>> 
>>> I guess you mean the master hash?
>>> 
>>> Oki, there are 3 encryption tokens in place:
>>> 
>>> 1.) The master password provided by the user in the CLI when creating
>> the master password (writing the CLI right now):
>>> 
>>> $> java -jar apache-deltaspike-core-impl.jar encode -masterPassword
>> myMasterPassword -masterSalt someSecretOnlyKnownToMeAndTheApplication
>>> 
>>> The masterPassword does NOT get stored anywhere. Neither in plain text
>> nor encrypted. It's _only_ known to the user who creates the masterHas.
>>> 
>>> 2.) The masterPassword ("myMasterPassword") gets hashed and THIS will be
>> used to encrypt/decrypt the user passwords in the end.
>>> Of course the hash does _not_ get stored directly but only encrypted via
>> the master Salt ("someSecretOnlyKnownToMeAndTheApplication").
>>> The key in the ~/.deltaspike/master.hash properties file is the the hash
>> hashed again: effectively hash(hash(masterPassword)). That way you cannot
>> get back from the key in the master.hash file to the key used to decrypt
>> the hash of the masterPassword
>>> 
>>> 3.) the hash of the masterPassword (as stored in the master.hash file
>> encrypted via the masterSalt) is then used to encrypt/decrypt the actual
>> security, e.g. a jdbc.user.password.
>>> There is again a CLI to encode it
>>> $> java -jar apache-deltaspike-core-impl.jar encode -plaintext
>> ThisIsMyDatabasePassword -masterSalt someSecretOnlyKnownToMeAndTheA
>> pplication
>>> 
>>> 
>>> 
>>> To give more protection, the masterSalt is only known to the
>> administrator and the application. This could also include installation
>> dependent information like the MAC address, the UID of the /dev/sda disk,
>> etc. Even the current day! That way you can force a master password hash
>> which is only valid for a single day, of course without having to
>> re-encrypted information stored somewhere in your DB etc. every day.
>>> 
>>> 
>>> Makes sense?
>>> 
>>> LieGrue,
>>> strub
>>> 
>>> 
>>> 
>>> 
>>>> - When I use AES, I always use an Initialization Vector (IV) and specify
>>>> the Block mode and padding.
>>> 
>>> 
>>> Glad to improve that part!
>>> 
>>> 
>>>> Am 11.05.2017 um 21:11 schrieb Rudy De Busscher <rdebusscher@gmail.com
>>> :
>>>> 
>>>> Hi Mark,
>>>> 
>>>> As I'm working lately quite a lot with security and encryption, I was
>>>> interested in your implementation.
>>>> 
>>>> I don't have the time today to look into details, but I already have
>> some
>>>> questions
>>>> 
>>>> - Why hashing with SHA-1 (not a secure hashing algorithm anymore). Why
>> the
>>>> additional hashing (before AES encryption) as you mention that we try
>> only
>>>> to 'obscure'.
>>>> - When I use AES, I always use an Initialization Vector (IV) and specify
>>>> the Block mode and padding.
>>>> 
>>>> I'll try to find some time this weekend to study the code in detail.
>>>> 
>>>> best regards
>>>> Rudy
>>>> 
>>>> 
>>>> On 11 May 2017 at 19:05, Mark Struberg (JIRA) <ji...@apache.org> wrote:
>>>> 
>>>>> 
>>>>>  [ https://issues.apache.org/jira/browse/DELTASPIKE-1250?
>>>>> page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&
>>>>> focusedCommentId=16006784#comment-16006784 ]
>>>>> 
>>>>> Mark Struberg commented on DELTASPIKE-1250:
>>>>> -------------------------------------------
>>>>> 
>>>>> A first design proposal can be found on my github repo
>>>>> https://github.com/struberg/deltaspike/tree/DELTASPIKE-1250
>>>>> 
>>>>> Will now add a main method to generate the master password and encrypt
>>>>> content
>>>>> 
>>>>>> create a master/client encryption handling
>>>>>> ------------------------------------------
>>>>>> 
>>>>>>              Key: DELTASPIKE-1250
>>>>>>              URL: https://issues.apache.org/
>>>>> jira/browse/DELTASPIKE-1250
>>>>>>          Project: DeltaSpike
>>>>>>       Issue Type: New Feature
>>>>>>       Components: Configuration
>>>>>> Affects Versions: 1.7.2
>>>>>>         Reporter: Mark Struberg
>>>>>>         Assignee: Mark Struberg
>>>>>>          Fix For: 1.8.0
>>>>>> 
>>>>>> 
>>>>>> For storing passwords in our configuration I'd like to implement a 2
>>>>> stage approach to symmetric encryption.
>>>>>> The current ideas is to have an encrypted has derived from a master
>>>>> password and box-locale information (MAC, IP, expiry date, etc).
>>>>>> This encrypted sequence is different on every box. But the decrypted
>>>>> hash is not.
>>>>>> 
>>>>>> With this hash we can encode a user password, which is then ofc the
>> same
>>>>> on different boxes.
>>>>>> Of course all that is just security by obscurity, but it's still much
>>>>> better than plaintext and even close to vault.
>>>>>> After all, the only really secure way is using a hardware crypto box
>>>>> plus the user has to manually provide a password and not using static
>>>>> passwords but 1-time consumable tokens.
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> This message was sent by Atlassian JIRA
>>>>> (v6.3.15#6346)
>>>>> 
>>> 
>> 
>> 


Re: [jira] [Commented] (DELTASPIKE-1250) create a master/client encryption handling

Posted by Romain Manni-Bucau <rm...@gmail.com>.
I think until we support a hsm strategy- which relies on infra more than
encryption - we can just put it all in clear, security level will be 1-1.
So IMHO it is really "do people feel more comfortable with unclear text
even if it is as secured as clear text". If we start to go until "if I'm in
the app" then the security is compromished anyway even if it is sha etc...

So concretely I think it is fine but if the proposed action is just to move
to sha-256 or another impl it doesnt hurt much to do, if the action is more
impacting like creating 1000 files of 1M with a very specific stratégy to
read a byte in each of them depending the file timestamp and jumping on a
leg I'm not sure it does worth it since the assumption to access the clear
password is exactly the same as having it in clear.

makes sense?



Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://blog-rmannibucau.rhcloud.com> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
<https://javaeefactory-rmannibucau.rhcloud.com>

2017-05-12 12:57 GMT+02:00 Mark Struberg <st...@yahoo.de.invalid>:

> Btw, the date, etc should of course _not_ get handed over as masterSalt in
> cleartext!
> If someone would debug the app (also stealing the jars) then a string like
> "my app-2017-05-12-192.168.4.123
> Then it would be easily recognisable how the pattern looks like.
> But if you just apply a sha1 on that string, then nobody could tell what
> is behind is. And you could hie this information pretty well in your
> application somewhere.
>
> Of course that does still not create absolute security (there is no such
> thing like an absolute security).
> But an attacker would need
> * the actual encrypted secret information string
> * the ~/.deltaspike/master.hash file (or wherever you store it, this is
> just the default)
> * the fully running application (with most business applications this is
> not as easy as it sounds - try to install a big app on some fresh server...)
> * the algorithm of the masterSalt.
>
>
> LieGrue,
> strub
>
>
>
> > Am 12.05.2017 um 12:31 schrieb Mark Struberg <struberg@yahoo.de.INVALID
> >:
> >
> > Txs Rudy, any help is welcome!
> >
> >
> >> - Why hashing with SHA-1
> >
> > I guess you mean the master hash?
> >
> > Oki, there are 3 encryption tokens in place:
> >
> > 1.) The master password provided by the user in the CLI when creating
> the master password (writing the CLI right now):
> >
> > $> java -jar apache-deltaspike-core-impl.jar encode -masterPassword
> myMasterPassword -masterSalt someSecretOnlyKnownToMeAndTheApplication
> >
> > The masterPassword does NOT get stored anywhere. Neither in plain text
> nor encrypted. It's _only_ known to the user who creates the masterHas.
> >
> > 2.) The masterPassword ("myMasterPassword") gets hashed and THIS will be
> used to encrypt/decrypt the user passwords in the end.
> > Of course the hash does _not_ get stored directly but only encrypted via
> the master Salt ("someSecretOnlyKnownToMeAndTheApplication").
> > The key in the ~/.deltaspike/master.hash properties file is the the hash
> hashed again: effectively hash(hash(masterPassword)). That way you cannot
> get back from the key in the master.hash file to the key used to decrypt
> the hash of the masterPassword
> >
> > 3.) the hash of the masterPassword (as stored in the master.hash file
> encrypted via the masterSalt) is then used to encrypt/decrypt the actual
> security, e.g. a jdbc.user.password.
> > There is again a CLI to encode it
> > $> java -jar apache-deltaspike-core-impl.jar encode -plaintext
> ThisIsMyDatabasePassword -masterSalt someSecretOnlyKnownToMeAndTheA
> pplication
> >
> >
> >
> > To give more protection, the masterSalt is only known to the
> administrator and the application. This could also include installation
> dependent information like the MAC address, the UID of the /dev/sda disk,
> etc. Even the current day! That way you can force a master password hash
> which is only valid for a single day, of course without having to
> re-encrypted information stored somewhere in your DB etc. every day.
> >
> >
> > Makes sense?
> >
> > LieGrue,
> > strub
> >
> >
> >
> >
> >> - When I use AES, I always use an Initialization Vector (IV) and specify
> >> the Block mode and padding.
> >
> >
> > Glad to improve that part!
> >
> >
> >> Am 11.05.2017 um 21:11 schrieb Rudy De Busscher <rdebusscher@gmail.com
> >:
> >>
> >> Hi Mark,
> >>
> >> As I'm working lately quite a lot with security and encryption, I was
> >> interested in your implementation.
> >>
> >> I don't have the time today to look into details, but I already have
> some
> >> questions
> >>
> >> - Why hashing with SHA-1 (not a secure hashing algorithm anymore). Why
> the
> >> additional hashing (before AES encryption) as you mention that we try
> only
> >> to 'obscure'.
> >> - When I use AES, I always use an Initialization Vector (IV) and specify
> >> the Block mode and padding.
> >>
> >> I'll try to find some time this weekend to study the code in detail.
> >>
> >> best regards
> >> Rudy
> >>
> >>
> >> On 11 May 2017 at 19:05, Mark Struberg (JIRA) <ji...@apache.org> wrote:
> >>
> >>>
> >>>   [ https://issues.apache.org/jira/browse/DELTASPIKE-1250?
> >>> page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&
> >>> focusedCommentId=16006784#comment-16006784 ]
> >>>
> >>> Mark Struberg commented on DELTASPIKE-1250:
> >>> -------------------------------------------
> >>>
> >>> A first design proposal can be found on my github repo
> >>> https://github.com/struberg/deltaspike/tree/DELTASPIKE-1250
> >>>
> >>> Will now add a main method to generate the master password and encrypt
> >>> content
> >>>
> >>>> create a master/client encryption handling
> >>>> ------------------------------------------
> >>>>
> >>>>               Key: DELTASPIKE-1250
> >>>>               URL: https://issues.apache.org/
> >>> jira/browse/DELTASPIKE-1250
> >>>>           Project: DeltaSpike
> >>>>        Issue Type: New Feature
> >>>>        Components: Configuration
> >>>>  Affects Versions: 1.7.2
> >>>>          Reporter: Mark Struberg
> >>>>          Assignee: Mark Struberg
> >>>>           Fix For: 1.8.0
> >>>>
> >>>>
> >>>> For storing passwords in our configuration I'd like to implement a 2
> >>> stage approach to symmetric encryption.
> >>>> The current ideas is to have an encrypted has derived from a master
> >>> password and box-locale information (MAC, IP, expiry date, etc).
> >>>> This encrypted sequence is different on every box. But the decrypted
> >>> hash is not.
> >>>>
> >>>> With this hash we can encode a user password, which is then ofc the
> same
> >>> on different boxes.
> >>>> Of course all that is just security by obscurity, but it's still much
> >>> better than plaintext and even close to vault.
> >>>> After all, the only really secure way is using a hardware crypto box
> >>> plus the user has to manually provide a password and not using static
> >>> passwords but 1-time consumable tokens.
> >>>
> >>>
> >>>
> >>> --
> >>> This message was sent by Atlassian JIRA
> >>> (v6.3.15#6346)
> >>>
> >
>
>

Re: [jira] [Commented] (DELTASPIKE-1250) create a master/client encryption handling

Posted by Mark Struberg <st...@yahoo.de.INVALID>.
Btw, the date, etc should of course _not_ get handed over as masterSalt in cleartext! 
If someone would debug the app (also stealing the jars) then a string like "my app-2017-05-12-192.168.4.123
Then it would be easily recognisable how the pattern looks like. 
But if you just apply a sha1 on that string, then nobody could tell what is behind is. And you could hie this information pretty well in your application somewhere.

Of course that does still not create absolute security (there is no such thing like an absolute security).
But an attacker would need
* the actual encrypted secret information string
* the ~/.deltaspike/master.hash file (or wherever you store it, this is just the default)
* the fully running application (with most business applications this is not as easy as it sounds - try to install a big app on some fresh server...)
* the algorithm of the masterSalt.


LieGrue,
strub



> Am 12.05.2017 um 12:31 schrieb Mark Struberg <st...@yahoo.de.INVALID>:
> 
> Txs Rudy, any help is welcome!
> 
> 
>> - Why hashing with SHA-1
> 
> I guess you mean the master hash?
> 
> Oki, there are 3 encryption tokens in place:
> 
> 1.) The master password provided by the user in the CLI when creating the master password (writing the CLI right now):
> 
> $> java -jar apache-deltaspike-core-impl.jar encode -masterPassword myMasterPassword -masterSalt someSecretOnlyKnownToMeAndTheApplication
> 
> The masterPassword does NOT get stored anywhere. Neither in plain text nor encrypted. It's _only_ known to the user who creates the masterHas.
> 
> 2.) The masterPassword ("myMasterPassword") gets hashed and THIS will be used to encrypt/decrypt the user passwords in the end. 
> Of course the hash does _not_ get stored directly but only encrypted via the master Salt ("someSecretOnlyKnownToMeAndTheApplication"). 
> The key in the ~/.deltaspike/master.hash properties file is the the hash hashed again: effectively hash(hash(masterPassword)). That way you cannot get back from the key in the master.hash file to the key used to decrypt the hash of the masterPassword
> 
> 3.) the hash of the masterPassword (as stored in the master.hash file encrypted via the masterSalt) is then used to encrypt/decrypt the actual security, e.g. a jdbc.user.password.
> There is again a CLI to encode it
> $> java -jar apache-deltaspike-core-impl.jar encode -plaintext ThisIsMyDatabasePassword -masterSalt someSecretOnlyKnownToMeAndTheApplication
> 
> 
> 
> To give more protection, the masterSalt is only known to the administrator and the application. This could also include installation dependent information like the MAC address, the UID of the /dev/sda disk, etc. Even the current day! That way you can force a master password hash which is only valid for a single day, of course without having to re-encrypted information stored somewhere in your DB etc. every day.
> 
> 
> Makes sense?
> 
> LieGrue,
> strub
> 
> 
> 
> 
>> - When I use AES, I always use an Initialization Vector (IV) and specify
>> the Block mode and padding.
> 
> 
> Glad to improve that part!
> 
> 
>> Am 11.05.2017 um 21:11 schrieb Rudy De Busscher <rd...@gmail.com>:
>> 
>> Hi Mark,
>> 
>> As I'm working lately quite a lot with security and encryption, I was
>> interested in your implementation.
>> 
>> I don't have the time today to look into details, but I already have some
>> questions
>> 
>> - Why hashing with SHA-1 (not a secure hashing algorithm anymore). Why the
>> additional hashing (before AES encryption) as you mention that we try only
>> to 'obscure'.
>> - When I use AES, I always use an Initialization Vector (IV) and specify
>> the Block mode and padding.
>> 
>> I'll try to find some time this weekend to study the code in detail.
>> 
>> best regards
>> Rudy
>> 
>> 
>> On 11 May 2017 at 19:05, Mark Struberg (JIRA) <ji...@apache.org> wrote:
>> 
>>> 
>>>   [ https://issues.apache.org/jira/browse/DELTASPIKE-1250?
>>> page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&
>>> focusedCommentId=16006784#comment-16006784 ]
>>> 
>>> Mark Struberg commented on DELTASPIKE-1250:
>>> -------------------------------------------
>>> 
>>> A first design proposal can be found on my github repo
>>> https://github.com/struberg/deltaspike/tree/DELTASPIKE-1250
>>> 
>>> Will now add a main method to generate the master password and encrypt
>>> content
>>> 
>>>> create a master/client encryption handling
>>>> ------------------------------------------
>>>> 
>>>>               Key: DELTASPIKE-1250
>>>>               URL: https://issues.apache.org/
>>> jira/browse/DELTASPIKE-1250
>>>>           Project: DeltaSpike
>>>>        Issue Type: New Feature
>>>>        Components: Configuration
>>>>  Affects Versions: 1.7.2
>>>>          Reporter: Mark Struberg
>>>>          Assignee: Mark Struberg
>>>>           Fix For: 1.8.0
>>>> 
>>>> 
>>>> For storing passwords in our configuration I'd like to implement a 2
>>> stage approach to symmetric encryption.
>>>> The current ideas is to have an encrypted has derived from a master
>>> password and box-locale information (MAC, IP, expiry date, etc).
>>>> This encrypted sequence is different on every box. But the decrypted
>>> hash is not.
>>>> 
>>>> With this hash we can encode a user password, which is then ofc the same
>>> on different boxes.
>>>> Of course all that is just security by obscurity, but it's still much
>>> better than plaintext and even close to vault.
>>>> After all, the only really secure way is using a hardware crypto box
>>> plus the user has to manually provide a password and not using static
>>> passwords but 1-time consumable tokens.
>>> 
>>> 
>>> 
>>> --
>>> This message was sent by Atlassian JIRA
>>> (v6.3.15#6346)
>>> 
> 


Re: [jira] [Commented] (DELTASPIKE-1250) create a master/client encryption handling

Posted by Mark Struberg <st...@yahoo.de.INVALID>.
Txs Rudy, any help is welcome!


> - Why hashing with SHA-1

I guess you mean the master hash?

Oki, there are 3 encryption tokens in place:

1.) The master password provided by the user in the CLI when creating the master password (writing the CLI right now):

$> java -jar apache-deltaspike-core-impl.jar encode -masterPassword myMasterPassword -masterSalt someSecretOnlyKnownToMeAndTheApplication

The masterPassword does NOT get stored anywhere. Neither in plain text nor encrypted. It's _only_ known to the user who creates the masterHas.

2.) The masterPassword ("myMasterPassword") gets hashed and THIS will be used to encrypt/decrypt the user passwords in the end. 
Of course the hash does _not_ get stored directly but only encrypted via the master Salt ("someSecretOnlyKnownToMeAndTheApplication"). 
The key in the ~/.deltaspike/master.hash properties file is the the hash hashed again: effectively hash(hash(masterPassword)). That way you cannot get back from the key in the master.hash file to the key used to decrypt the hash of the masterPassword

3.) the hash of the masterPassword (as stored in the master.hash file encrypted via the masterSalt) is then used to encrypt/decrypt the actual security, e.g. a jdbc.user.password.
There is again a CLI to encode it
$> java -jar apache-deltaspike-core-impl.jar encode -plaintext ThisIsMyDatabasePassword -masterSalt someSecretOnlyKnownToMeAndTheApplication



To give more protection, the masterSalt is only known to the administrator and the application. This could also include installation dependent information like the MAC address, the UID of the /dev/sda disk, etc. Even the current day! That way you can force a master password hash which is only valid for a single day, of course without having to re-encrypted information stored somewhere in your DB etc. every day.


Makes sense?

LieGrue,
strub




> - When I use AES, I always use an Initialization Vector (IV) and specify
> the Block mode and padding.


Glad to improve that part!


> Am 11.05.2017 um 21:11 schrieb Rudy De Busscher <rd...@gmail.com>:
> 
> Hi Mark,
> 
> As I'm working lately quite a lot with security and encryption, I was
> interested in your implementation.
> 
> I don't have the time today to look into details, but I already have some
> questions
> 
> - Why hashing with SHA-1 (not a secure hashing algorithm anymore). Why the
> additional hashing (before AES encryption) as you mention that we try only
> to 'obscure'.
> - When I use AES, I always use an Initialization Vector (IV) and specify
> the Block mode and padding.
> 
> I'll try to find some time this weekend to study the code in detail.
> 
> best regards
> Rudy
> 
> 
> On 11 May 2017 at 19:05, Mark Struberg (JIRA) <ji...@apache.org> wrote:
> 
>> 
>>    [ https://issues.apache.org/jira/browse/DELTASPIKE-1250?
>> page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&
>> focusedCommentId=16006784#comment-16006784 ]
>> 
>> Mark Struberg commented on DELTASPIKE-1250:
>> -------------------------------------------
>> 
>> A first design proposal can be found on my github repo
>> https://github.com/struberg/deltaspike/tree/DELTASPIKE-1250
>> 
>> Will now add a main method to generate the master password and encrypt
>> content
>> 
>>> create a master/client encryption handling
>>> ------------------------------------------
>>> 
>>>                Key: DELTASPIKE-1250
>>>                URL: https://issues.apache.org/
>> jira/browse/DELTASPIKE-1250
>>>            Project: DeltaSpike
>>>         Issue Type: New Feature
>>>         Components: Configuration
>>>   Affects Versions: 1.7.2
>>>           Reporter: Mark Struberg
>>>           Assignee: Mark Struberg
>>>            Fix For: 1.8.0
>>> 
>>> 
>>> For storing passwords in our configuration I'd like to implement a 2
>> stage approach to symmetric encryption.
>>> The current ideas is to have an encrypted has derived from a master
>> password and box-locale information (MAC, IP, expiry date, etc).
>>> This encrypted sequence is different on every box. But the decrypted
>> hash is not.
>>> 
>>> With this hash we can encode a user password, which is then ofc the same
>> on different boxes.
>>> Of course all that is just security by obscurity, but it's still much
>> better than plaintext and even close to vault.
>>> After all, the only really secure way is using a hardware crypto box
>> plus the user has to manually provide a password and not using static
>> passwords but 1-time consumable tokens.
>> 
>> 
>> 
>> --
>> This message was sent by Atlassian JIRA
>> (v6.3.15#6346)
>> 


Re: [jira] [Commented] (DELTASPIKE-1250) create a master/client encryption handling

Posted by Rudy De Busscher <rd...@gmail.com>.
Hi Mark,

As I'm working lately quite a lot with security and encryption, I was
interested in your implementation.

I don't have the time today to look into details, but I already have some
questions

- Why hashing with SHA-1 (not a secure hashing algorithm anymore). Why the
additional hashing (before AES encryption) as you mention that we try only
to 'obscure'.
- When I use AES, I always use an Initialization Vector (IV) and specify
the Block mode and padding.

I'll try to find some time this weekend to study the code in detail.

best regards
Rudy


On 11 May 2017 at 19:05, Mark Struberg (JIRA) <ji...@apache.org> wrote:

>
>     [ https://issues.apache.org/jira/browse/DELTASPIKE-1250?
> page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&
> focusedCommentId=16006784#comment-16006784 ]
>
> Mark Struberg commented on DELTASPIKE-1250:
> -------------------------------------------
>
> A first design proposal can be found on my github repo
> https://github.com/struberg/deltaspike/tree/DELTASPIKE-1250
>
> Will now add a main method to generate the master password and encrypt
> content
>
> > create a master/client encryption handling
> > ------------------------------------------
> >
> >                 Key: DELTASPIKE-1250
> >                 URL: https://issues.apache.org/
> jira/browse/DELTASPIKE-1250
> >             Project: DeltaSpike
> >          Issue Type: New Feature
> >          Components: Configuration
> >    Affects Versions: 1.7.2
> >            Reporter: Mark Struberg
> >            Assignee: Mark Struberg
> >             Fix For: 1.8.0
> >
> >
> > For storing passwords in our configuration I'd like to implement a 2
> stage approach to symmetric encryption.
> > The current ideas is to have an encrypted has derived from a master
> password and box-locale information (MAC, IP, expiry date, etc).
> > This encrypted sequence is different on every box. But the decrypted
> hash is not.
> >
> > With this hash we can encode a user password, which is then ofc the same
> on different boxes.
> > Of course all that is just security by obscurity, but it's still much
> better than plaintext and even close to vault.
> > After all, the only really secure way is using a hardware crypto box
> plus the user has to manually provide a password and not using static
> passwords but 1-time consumable tokens.
>
>
>
> --
> This message was sent by Atlassian JIRA
> (v6.3.15#6346)
>