Passky-Server icon indicating copy to clipboard operation
Passky-Server copied to clipboard

Add Shared Hosting Finalization

Open vzool opened this issue 2 years ago • 38 comments

#8

Passky Shared Hosting

# Makes installers executable
chmod +x installer.sh installerGUI.sh shared-hosting-finalization.sh
# Start the GUI installer
./installerGUI.sh
# Then do the finalization for Shared Hosting environment
./shared-hosting-finalization.sh

vzool avatar May 03 '22 07:05 vzool

This PR will create a public folder, which Shared hosting should point to that location only. From cPanel for instance, this can be done easily by subDomain to directory mapping, like passky.example.com which point to Passky-Server/public.

vzool avatar May 03 '22 07:05 vzool

Thanks, will check it in few days.

zigazajc007 avatar May 03 '22 09:05 zigazajc007

Sorry, for the delay. Will check and test everything this month.

zigazajc007 avatar Jul 02 '22 08:07 zigazajc007

I don't think most shared website hosting providers will allow users to execute bash code. But we can provide them with all the files and navigate them where they need to put them.

zigazajc007 avatar Oct 06 '22 09:10 zigazajc007

I don't think most shared website hosting providers will allow users to execute bash code. But we can provide them with all the files and navigate them where they need to put them.

Agree, but I suggest that we can make both options available, which will be a very handy tool. I feel that in the future Shared Hosting will change its course to make the shell available for all. Always there is a trick, for instance, any Shared Hosting has a CRON which is a Shell execution in a selected time. 🙃🤣

vzool avatar Oct 06 '22 10:10 vzool

I'm now working on the big update.

Changes:

  • AES replaced with XChaCha20 (NordPass already uses XChaCha20 and to be future proof it is better to switch sooner with less users than later)
  • SHA replaced with Argon2id (Argon2 is the winner of Password Hashing Competition)
  • Password Entropy (Users will be able to use any character / emoji... for their password. So it would be a lot easier for users to create their account) https://github.com/Rabbit-Company/Passky-Server/issues/6
  • Load-Balancer will be deployed on eu.passky.org and another one on us.passky.org, that will redirect and split users between multiple VPS (scalability). So database won't be located on each VPS / Passky server anymore, but it will be located on PlanetScale. With this method Passky will be able to scale like other password managers.
  • Passky Client will notify you and refuse to connect on unsupported Passky Server. So you will then be able to choose the correct Passky Client in order to connect.
  • Each account on eu.passky.org and us.passky.org servers will be able to store of up to 100 passwords for free. If user will upgrade their package to paid version, it will be able to store of up to 1000 passwords. So both free and paid packages will contain all the features and only difference will be the amount of passwords the account can store. I'm still not sure for the pricing of a paid package. But for the current Passky users I will give paid package for free forever.
  • Whitepaper on how Passky works / improved FAQ
  • API documentation, so developers could start making their own clients

After this update, I think that Passky will be ready to reach the masses. It would most likely take few months for everything to be completed and tested. I have also contacted few companies for a security audit and I think that I will go with a Cure53.

In this update (When those features will be added) we can also test everything on a shared hosting and add official support for it.

If you have any suggestion feel free to provide it.

zigazajc007 avatar Oct 06 '22 10:10 zigazajc007

AES replaced with XChaCha20 (NordPass already uses XChaCha20 and to be future proof it is better to switch sooner with less users than later)

Sorry for the late response, I got busy. BTW, I don't know how to implement XChaCha20! So, I think it will be a good practice if there is a blog, a reference, and a comments in the Source Code as well for how to implement XChaCha20, because as far as I know, any encryption algorithm has its own parameters and it demands some tweaks to be practical and secure. Core encryption requires a good care, specially when converted from known encryption algorithm to another.

vzool avatar Oct 09 '22 07:10 vzool

SHA replaced with Argon2id (Argon2 is the winner of Password Hashing Competition)

+1 Good choice

vzool avatar Oct 09 '22 08:10 vzool

So, I think it will be a good practice if there is a blog, a reference, and a comments in the Source Code as well for how to implement XChaCha20, because as far as I know, any encryption algorithm has its own parameters and it demands some tweaks to be practical and secure.

XChaCha20 has already been implemented. You can check dev branch from https://github.com/Rabbit-Company/Passky-Website. XChaCha20 has been build based on RFC and already tested with a test vectors. https://github.com/Rabbit-Company/XChaCha20-JS

Argon2id implementation is still in progress.

Core encryption requires a good care, specially when converted from known encryption algorithm to another.

The power of XChaCha20 is that it's really easy to implement and hard to screw things up. That's why a lot of cryptographers recommend it over AES.

NordPass wrote amazing blog about XChaCha20: https://nordpass.com/features/xchacha20-encryption/

zigazajc007 avatar Oct 09 '22 08:10 zigazajc007

Security audit of XChaCha20 implementation would cost 3.750€ from Cure53.

zigazajc007 avatar Oct 09 '22 08:10 zigazajc007

Security audit of XChaCha20 implementation would cost 3.750€ from Cure53.

Had be done a Security audit for AES implementation before, which encouraged the project to adapt it?

vzool avatar Oct 09 '22 08:10 vzool

Had be done a Security audit for AES implementation before, which encouraged the project to adapt it?

We have used existing CryptoJS library that majority of world used. So this library has already went thru a lot of security audits.

zigazajc007 avatar Oct 09 '22 08:10 zigazajc007

Also what do you think about pricing: https://passky.org/pricing

I still don't know if I should provide unlimited passwords in Premium package or 1000. If I choose unlimited then I would need to regularly monitor accounts that they are not abusing it.

zigazajc007 avatar Oct 09 '22 09:10 zigazajc007

Had be done a Security audit for AES implementation before, which encouraged the project to adapt it?

We have used existing CryptoJS library that majority of world used. So this library has already went thru a lot of security audits.

BTW, I don't know how to check all Security audits that any library went thru! if you know the way please tell me? Most of the developers supposed, that any library had many stars on Github, it should be secured and trusted by default, because no one complaint. (Yes, of course no one complaints on the surface at least.) The common sense here is suspected, that while more developers used the library the more likelihood its much secure. But stop and think, even if anyone said so and all the world wants your privacy, is it really true? Of course from small project and open source prospective, herd usage is better than nothing. I really do respect all parties, I do this to move to better direction. I think this project needs more open source involvement. So, I suggest that XChacha20 implementation should be added by a PR into CryptoJS, that will make a good attention for all. Later the project can make as many as it needs of Security audits. 🤗

vzool avatar Oct 09 '22 09:10 vzool

Most of the developers supposed, that any library had many stars on Github, it should be secured and trusted by default, because no one complaint.

This is also true.

So, I suggest that XChacha20 implementation should be added by a PR into CryptoJS, that will make a good attention for all.

The problem is that CryptoJS library uses WASM. So it's written in a C language and then it's compiled to support browsers. While my implementation is written in a plain JS (So performance of my library should be slower as C is faster than JS). That's why CryptoJS won't accept my implementation because it is written in pure JS and not in C.

I have also tested performance of XChaCha20 in Libsodium (Libsodium also uses C / wasm).

Here are the results of my XChaCha20 implementation in pure JS: image

Here are the results of Libsodium's XChaCha20 implementation in C: image

As you can see Libsodium does win in decryption which is more important for a password manager. But WASM (Libsodium) is not supported on browser extensions with manifest V3. That's why I needed to create my own implementation in pure JS.

zigazajc007 avatar Oct 09 '22 09:10 zigazajc007

Also what do you think about pricing: https://passky.org/pricing

Pricing is a good start, but consider into account The Purchasing Power Parities (PPP).

I still don't know if I should provide unlimited passwords in Premium package or 1000. If I choose unlimited then I would need to regularly monitor accounts that they are not abusing it.

Of course, Premium package must has unlimited passwords. But to stop abusing, the project can implement an algorithm to guarantee a Fair Use, which differentiate between abusing and fair use automatically.

vzool avatar Oct 09 '22 09:10 vzool

Pricing is a good start, but consider into account The Purchasing Power Parities (PPP).

When you buy a Premium package you will receive a license key. This license key can be send / resold to another person. So users can start buying thousands of licenses in poor countries and just resell them for a cheaper price to others.

(I will start with License system implementation this week)

Another problem will be privacy. For example if user will be able to buy Premium package anonymously with Monero in order to have PPP, I would need to request / get the country of the user, which would also reduce the privacy.

Of course, Premium package must has unlimited passwords. But to stop abusing, the project can implement an algorithm to guarantee a Fair Use, which differentiate between abusing and fair use automatically.

Thanks, I will use unlimited passwords with a fair use policy.

zigazajc007 avatar Oct 09 '22 10:10 zigazajc007

Pricing is a good start, but consider into account The Purchasing Power Parities (PPP).

When you buy a Premium package you will receive a license key. This license key can be send / resold to another person. So users can start buying thousands of licenses in poor countries and just resell them for a cheaper price to others.

(I will start with License system implementation this week)

Another problem will be privacy. For example if user will be able to buy Premium package anonymously with Monero in order to have PPP, I would need to request / get the country of the user, which would also reduce the privacy.

Of course, Premium package must has unlimited passwords. But to stop abusing, the project can implement an algorithm to guarantee a Fair Use, which differentiate between abusing and fair use automatically.

Thanks, I will use unlimited passwords with a fair use policy.

In fact, after sometime of thinking, I remember that I'm currently a LastPass user, and I did my first Premium purchased at 12 USD Annually before owned by LogMeIn. At then I made a purchase for 10 years which is a 120 USD. Now, I will think twice before repeat the same purchase again, because it is more expensive. So, I think 12 USD Annually is better price, many people want to get back the great days of first LastPass. 🤗

vzool avatar Oct 09 '22 10:10 vzool

Screen Shot 1444-03-13 at 1 54 39 PM Ahh, Nice days 😂

vzool avatar Oct 09 '22 10:10 vzool

You have saved so much money by buying subscription for multiple years. Now it would cost you a lot more with current LastPass pricing.

zigazajc007 avatar Oct 09 '22 10:10 zigazajc007

With password limit: image

No limit option 1: image

No limit option 2: image

Which option would you more prefer?

zigazajc007 avatar Oct 09 '22 10:10 zigazajc007

You have saved so much money by buying subscription for multiple years. Now it would cost you a lot more with current LastPass pricing.

Yes, indeed. This is can be another marketing motivation. "Let's restore the great days of LastPass" 🤗

vzool avatar Oct 09 '22 11:10 vzool

With password limit: image

No limit option 1: image

No limit option 2: image

Which option would you more prefer?

Option 2 is better, if there is no limit. Don't mention it.

vzool avatar Oct 09 '22 13:10 vzool

BTW, what is your main Password manager?

vzool avatar Oct 09 '22 13:10 vzool

BTW, what is your main Password manager?

My main password manager is Passky. That's why I have created it, to fulfill my needs.

zigazajc007 avatar Oct 09 '22 13:10 zigazajc007

I have just added option for removing password limit and account limit on the server.

This can be achieved by setting ACCOUNT_MAX and ACCOUNT_MAX_PASSWORDS to -1 in .env file.

Now I will also need to add pagination for accounts in Admin Panel. As now if you have more than 1000 accounts on your Passky Server created, and if you check the "Accounts" page in Admin Panel it will take some time in order to display 1000 accounts. Pagination will make everything a lot faster for managing bigger Passky Servers thru Admin Panel (GUI).

zigazajc007 avatar Oct 09 '22 15:10 zigazajc007

I switched to the latest Dev branch in order to make a full test, I didn't use the project as my main Password Manger before. But, now I'm looking forward to so. I can't login to an empty passwords account. Screenshot from 2022-10-10 05-43-54

vzool avatar Oct 10 '22 02:10 vzool

You are using old Passky Client v7.1.0, which is not compatible with Passky Server v8.0.0.

Make sure you also use Passky Client v8.0.0 from https://github.com/Rabbit-Company/Passky-Website dev branch.

Also currently other languages won't work as I'm waiting for translators, so please use English.

zigazajc007 avatar Oct 10 '22 04:10 zigazajc007

BTW, what is your main Password manager?

My main password manager is Passky. That's why I have created it, to fulfill my needs.

I tried to import from LastPass and I have this error:

Uncaught URIError: URI malformed
    at decodeURIComponent (<anonymous>)
    at XChaCha20.b64DecodeUnicode (XChaCha20.min.js:6:3778)
    at XChaCha20.xchacha20_decrypt (XChaCha20.min.js:6:3005)
    at XChaCha20.decrypt (XChaCha20.min.js:6:4332)
    at decryptPassword (default-functions.js:128:19)
    at import_data (export.js:361:105)
    at import_csv (export.js:353:2)
    at document.getElementById.onclick (export.js:426:60)
b64DecodeUnicode	@	XChaCha20.min.js:6
xchacha20_decrypt	@	XChaCha20.min.js:6
decrypt	@	XChaCha20.min.js:6
decryptPassword	@	default-functions.js:128

import_data	@	export.js:361
import_csv	@	export.js:353
document.getElementById.onclick	@	export.js:426

Screen Shot 1444-03-14 at 8 43 25 AM

vzool avatar Oct 10 '22 05:10 vzool

Adding a new password is not working Screen Shot 1444-03-14 at 9 01 34 AM

vzool avatar Oct 10 '22 06:10 vzool