I think some people are taking this a bit too seriously.
This particular example cannot be taken seriously as an
approximation of a real bank, and the "credentials"
need not be anything other than a simple clear-text string.
There is, for example, *NO* interface of any kind (UI or
API) anywhere in the challenge, and *NO* test cases or
examples from which test cases could be derived.  It is
at best an exercise in not mucking up *too* badly.

Given that, it's not *that* hard to keep secrets, or it
wouldn't be if Pharo didn't have #instVarAt: (:-).  So
the model code I've attached isn't in Pharo (:-).



On Tue, 20 Aug 2019 at 02:19, Roelof Wobben <r.wob...@home.nl> wrote:

> Thanks all for the answers.
>
> As I see it , it impossible to store the password in the bankaccount
> object and make safe code to use it,
> So some one give me a stupid assignment.
>
> Roelof
>
>
>
> Op 19-8-2019 om 11:38 schreef Diego Lont:
>
> Hi Jupiter.
>
> This is always a hard problem, as you state: you want a customer to change
> their own password, and also want a customer to be allowed to set a
> password that he has lost. You could of course make your server code more
> resilient, and demand there is security information provided when changing
> a password.
>
> I.E.
> newPassword: aString authentication: anAuthenticationInformation
> “ and here you need to verify the authentication information being:
> 1. user / password of the user that has the account
> 2. user / password of an administration
> 3. reset information sent to the user
> “
> … details can very, but as said: there will always be a back door.
>
> So if it is really important, one should implement strong authentication.
> Strong authentication is based on the fact, that a user not only knows
> something, but also has something. That is why banks always use things such
> as a “rabo scanner” that you need to insert your bank pass (something you
> have), type your pin (something you know) and input a picture / code and
> the result is a new code that you enter.
>
> On 19 Aug 2019, at 10:01, Jupiter Jones <jupiter.jo...@mail.com> wrote:
>
> Hi Deigo,
>
> Apologies Roelof for jumping in to your thread. :)
>
> This solves the issue of storing passwords, however, Richard made the case
> for malevolent or broken code…
>
>  - you not only provide a getter for the
>    password, but a setter!  This means that
>    malevolent/broken code can do
>      aBankAccount password: 'PWNED!'.
>    and then supply the new password 'PWNED!'
>    whenever a password is needed.
>  > The password must be supplied when a
>    BankAccount is changed and it should not
>    be settable afterwards (except perhaps with
>    a master key).
>
>
> To scale there is likely the need to allow customers to change their own
> password without call centre or administrator intervention.
>
> Do you know of any implementations of user/password stores that are
> resilient to malevolent or broken code?
>
> Cheers,
>
> J
>
> On 19 Aug 2019, at 5:40 pm, Diego Lont <diego.l...@delware.nl> wrote:
>
> The best way to implement a password security is to never store the
> password, but only a hashed password. This way, you never can have a
> security leak for your passwords: because you don’t have them. And for
> hashing you use a standard modern hashing algorithm, so it cannot be easily
> rolled back. What I often use is that I make the username readonly, and
> make the hash depend on the username (i.e. use the username as seed)
>
> So you implement
> password: aString
> self hashedPassword: (self hash: aString)
>
> verifyPassword: aString
> ^(self hash: aString) = self hashedPassword
>
> Regards,
> Diego
>
>
>
>
>

Attachment: challenge.st
Description: Binary data

Reply via email to