55 Bình luận
  • xoai
    Trong bài phỏng vấn có nhắc đến sử dụng kiến trúc serverless cái này chắc ít bạn để ý.

    Mình tin lời Huy và lời khẳng định không lưu username & password trên bất kỳ máy chủ nào nếu kiến trúc serverless được tuân thủ.

    Nôm na có thể hiểu quy trình như thế này:

    1. Username và Password chỉ được lưu trong máy của user (tất nhiên không phải dưới dạng thô mà đã được mã hóa).

    2. Khi user mở app, username và password sẽ được truyền lên Finsify (tất nhiên không phải dưới dạng thô mà đã được mã hóa SSL/TLS khi truyền và kèm theo token định danh user).

    3. API Endpoint mà Finsify tiếp nhận username & password thật ra không phải là "server" mà là dịch vụ Amazon Lambda (https://ltus.me/BNq).

    Amazon Lambda nó không phải là server, không có khái niệm server và không tồn tại cái gọi là server nào để quản lý.

    Amazon Lambda chỉ chưa bộ code thực thi của Finsify. Bộ code này sẽ decrypt username & password rồi dùng để thực hiện việc crawl dữ liệu mới nhất từ bank sau đó trả dữ liệu giao dịch về cho máy người dùng cấp nhật vào local DB (SQLite).

    Lúc này username & password chỉ như là 2 parameter để chạy một function thôi. Và khi quá trình này hoàn tất, username, password cũng không lưu ở đâu trên Lambda cả (vì Lambda không có cái gì để lưu trữ lâu dài - TRỪ KHI ML sử dụng các dịch vụ persistent storage khác ví dụ như Dynamo DB hay S3,... và trong bộ code có thực hiện việc đẩy thông tin username & password sang các storage này).

    Bạn nào bắt bẻ thì có thể nói username & password của người dùng dưới dạng thô THẬT SỰ có tồn tại đâu đó trong 1/hàng triệu thanh bộ nhớ trên hệ thống cloud của Amazon trong khoảng thời gian ngắn ngủi đoạn code của Finsify trên Lambda được thực thi. Và khi việc thực thi hoàn thành thì nó cũng được clear khỏi memory rồi.
  • HuyThai
    Lastpass lưu mật khẩu dạng thô nhé, Money Lover mà lưu giống last pass thì tốt nhất không nên xài
    • HuyThai
      @viet2nt cái đó để encrypt data transfer thôi, chứ không hash cái password lưu xuống. Bạn có thể share pass cho mình 1 site nào đó, mình sẽ cho bạn biết pass đó gồm những ký tự nào
    • viet2nt
      @huythai lol tất nhiên phải lưu lại pwd để login rồi.
      Ý bạn raw là
      1) pwd vẫn được lưu trên máy (nhưng encrypted) cần master-pwd để decrypt
      2) hay được lưu ko encrypt ? vd pwd là 123456 sẽ có 1 file txt nào đó có chuỗi 123456 ?
    • HuyThai
      @viet2nt Password của các site bạn lưu không phải lưu trên máy của bạn mà trên server của Lastpass.

      Nếu các password đó được encrypt = master password của bạn, tức là bản thân master password không được encrypt. Trong trường hợp 1 nhân viên nào của lastpass có thể truy cập database thì có thể tìm ra master password rồi decrypt các password khác

      Nếu các password không được encrypt = master password thì đơn giản hơn rồi.

      Ở đây không nói chuyện dùng máy của bạn để lấy password của bạn, mà nói chuyện 1 nhân viên của app nảy sinh tà tâm. Lastpass thì có thể nói nó to, tin tưởng được, MoneyLover có to = Lastpass không, có tin được không?
    • viet2nt
      @huythai
      LastPass encrypts your Vault before it goes to the server using 256-bit AES encryption. Since the Vault is already encrypted before it leaves your computer and reaches the LastPass server, not even LastPass employees can see your sensitive data!


      ; )

      Ủa mà vậy thì ML đâu có làm như lastpass nhỉ? password vẫn được gửi lên cho server của ML
    • HuyThai
      @viet2nt client side encryption, cái decryption key thì lưu trên server, tất nhiên nó phải bảo thế chứ chả lẽ nó bảo nhân viên nó toàn quyền reset cái decryption key của khách
    • viet2nt
      @huythai ủa bạn nói lastpass hay ML? lastpass thì key decrypt lưu ở client mà? mình ko thấy có lý do gì lastpass ko làm thế?

      The decryption key, which NEVER leaves your computer, is then used to decrypt your Vault once it comes back
    • HuyThai
      @viet2nt bạn có thể đổi máy mà vẫn xài chung acc lastpass được mà.
  • namwest
    con vái ô lên hình trông mất thẩm mỹ quá.
  • FinalDevil
    Vãi cả lưu giống lastpass. Chuẩn rồi còn gì.
  • tutuxinhxich
    Tởm thật, chỉ cần view password chưa cần storage đã phải PCI level 1 hoặc 2 rồi. Đây thì cứ như không. Không biết VPN có firewall không nữa..
  • thinker
    Dùng hash là one-way, ví dụ VCB có thể chỉ cần lưu hash + salt nếu họ muốn ví họ là cuối. ML thì qua server trung gian thì phải 2-way (tức là app encrypt thì server phải decrypt được), tức là ML app và server phải share cái secret key nào đó (mò/decompile java hoặc javascript có khi tìm được).

    Mình cũng ko có kiến thức sâu gì về bảo mật, nhưng hình dung cơ bản thì nó như thế.
    • viet2nt
      @thinker chỉ cần lưu local, dùng chính smartphone gửi https request đi, như vậy sẽ khó bị bank block hơn
    • hieutran
      @viet2nt dùng smartphone làm crawler luôn sẽ khiên app nặng và khá tốn data của khách hàng, ML đang chọn cách dùng server ML để làm crawler. Có nghĩa là bằng cách nào đó user và pass vẫn phải truyền lên server còn ML có lưu lại password hay không thì không dám chắc mặc dù anh Huy này khẳng định không lưu .

      @thinker app với server share public key thôi bác , đã share với nhau thì sao gọi là private được. Mò được public key thì cũng không ảnh hưởng gì lắm vì có public key cũng không giải mã được.
    • viet2nt
      @hieutran

      ML đang chọn cách dùng server ML để làm crawler


      Ủa vậy bank block đơn giản mà? có thể các bạn ấy dùng lambda của amazon - nhưng cũng vậy thôi - hay bank ko thèm block luôn?

      ML có lưu lại password hay không thì không dám chắc mặc dù anh Huy này khẳng định không lưu


      bạn Huy nói ko lưu clear-text
    • viet2nt
      @hieutran
      Mò được public key thì cũng không ảnh hưởng gì lắm vì có public key cũng không giải mã được


      dictionary attack được, nhất là password của bank vietnam, 6-8 kí tự, a-z0-9 : ))
    • thinker
      @viet2nt nếu dùng chính smartphone gửi đi thì nó dùng server trung gian làm qué gì?
    • viet2nt
      @thinker ý mình là có thể để smartphone gửi đi (khó bị bank block) - mình đâu có nói ML làm vậy?
    • goodlink
      @hieutran ML dùng server để crawler nghĩa là gì bác? crawler có giống với ý nghĩa trong search engine không ạ?
    • thinker
      @viet2nt mình hình dung thế này:
      1. ML show cái webview load login page từ server
      2. User nhập id và pass
      3. ML lưu id ở local, nó ko cần lưu pass
      4. Webview post id và pass lên server thông qua https
      5. Server connect VCB login thử để đảm bảo thông tin chính xác, sử dụng https
      5. Server encrypt pass sử dụng secret ket (secret key có thể thêm salt để khác nhau tùy user) sau đó lưu id và pass và database
      6. Background job định kì đọc database, decrypt pass, quét VCB bằng https lấy thông tin, có gì mới thì lưu vào DB
      7. Backgroud job khác định kỳ quét database, thấy gì mới thì push về client

      Cái 6 và 7 có thể là một.

      Như vậy rủi ro nằm chủ yếu ở chỗ server bị hack, lộ pass đã encrypt. Khi đó hacker cần mò key nữa mới decrypt được.
    • TKM
      @goodlink Hơi giống, dù ở đây đơn giản hơn. Server của ML sẽ dùng user và passwd của người dùng để đăng nhập vào internet banking (chưa hiểu làm sao qua được captcha), rồi crawl những page ở trên bank về, bóc tách những thông tin cần thiết (vd: lịch sử giao dịch chẳng hạn).
    • thinker
      À có thể server của nó là cái amazon lamda của khỉ gì đó như bạn @xoai nói, như vậy thì pass nó lưu dạng encrypted (sử dụng key) ở local, khi cần thì call server. Như vậy:
      - muốn realtime (kiểu thay sms banking) thì rất tốn pin (dùng services ping server liên tục)
      - rủi rỏ kiểu malware cài trên điện thoại (cái này thấy ko cao, vì malware phải truy cập được internal storage của ML, lại phải mò đc key)
    • hieutran
      @thinker em được biết thì crawler ở phía server bác ạ, client app chỉ request lên thôi chứ server của ML mới thực hiện việc cào dữ liệu về
    • TKM
      @hieutran vậy mỗi lần crawl lại chờ client gửi mật khẩu lên nhỉ? Cũng phiền toái phết
    • viet2nt
      @thinker
      1) amazon lambda thì rủi ro vẫn có -> mất account amazon dev
      2) vì dùng server (lambda hay ko) để query data thì server sẽ phải có cách để lấy được password bank --> nên nhân viên ML có thể lấy được user/pass của khác hàng (hoặc ai đó hack vào máy nhân viên ML)
  • Mr_OK
    Hơi tiếc cho Money lover. Qua cách trả lời thấy đc sp này đã qua giai đoạn rực rỡ nhất rồi.
    • ohisee
      @mr_ok chắc hết đường global rồi nên giờ chuyển qua local, lợi dụng lợi thế bản địa, mà chưa lợi được

      update: Finsify đang làm global và ML mang kinh nghiệm phục vụ cho anh em trong nước thôi.

      Làm ở VN đến khổ, tiền thì ít mà gạch đá thì nhiều.
    • Mr_OK
      @ohisee mình thì nghĩ bẻn này chưa thực sự thành business và hết idea để phát triển sp tiếp.
    • thinker
      @ohisee quản lý chi phí thì rào cản lớn nhất là ngại input giao dịch. Nhiều người dùng đc ít ngày bỏ vì ko nhập vài ngày nó ngãng ra.

      Nên liên kết ngân hàng và tự động scan bill là rất quan trọng.

      Vấn đề là mỗi nhà hàng siêu thị bill một khác nên phải có cách học format kết hợp nhận dạng chữ.

      Chém thế thôi chưa bao giờ dùng app dạng này, do lười input.
  • xoai
    Trong bài phỏng vấn có nhắc đến sử dụng kiến trúc serverless cái này chắc ít bạn để ý.

    Mình tin lời Huy và lời khẳng định không lưu username & password trên bất kỳ máy chủ nào nếu kiến trúc serverless được tuân thủ.

    Nôm na có thể hiểu quy trình như thế này:

    1. Username và Password chỉ được lưu trong máy của user (tất nhiên không phải dưới dạng thô mà đã được mã hóa).

    2. Khi user mở app, username và password sẽ được truyền lên Finsify (tất nhiên không phải dưới dạng thô mà đã được mã hóa SSL/TLS khi truyền và kèm theo token định danh user).

    3. API Endpoint mà Finsify tiếp nhận username & password thật ra không phải là "server" mà là dịch vụ Amazon Lambda (https://ltus.me/BNq).

    Amazon Lambda nó không phải là server, không có khái niệm server và không tồn tại cái gọi là server nào để quản lý.

    Amazon Lambda chỉ chưa bộ code thực thi của Finsify. Bộ code này sẽ decrypt username & password rồi dùng để thực hiện việc crawl dữ liệu mới nhất từ bank sau đó trả dữ liệu giao dịch về cho máy người dùng cấp nhật vào local DB (SQLite).

    Lúc này username & password chỉ như là 2 parameter để chạy một function thôi. Và khi quá trình này hoàn tất, username, password cũng không lưu ở đâu trên Lambda cả (vì Lambda không có cái gì để lưu trữ lâu dài - TRỪ KHI ML sử dụng các dịch vụ persistent storage khác ví dụ như Dynamo DB hay S3,... và trong bộ code có thực hiện việc đẩy thông tin username & password sang các storage này).

    Bạn nào bắt bẻ thì có thể nói username & password của người dùng dưới dạng thô THẬT SỰ có tồn tại đâu đó trong 1/hàng triệu thanh bộ nhớ trên hệ thống cloud của Amazon trong khoảng thời gian ngắn ngủi đoạn code của Finsify trên Lambda được thực thi. Và khi việc thực thi hoàn thành thì nó cũng được clear khỏi memory rồi.
    • TKM
      @xoai Vẫn có một điểm không an toàn là: Nếu dịch vụ có thể decrypt password của người dùng thì một bên khác cũng hoàn toàn có thể làm được điều tương tự, nếu có được encrypted password lưu trên điện thoại của người dùng. Đây là lý do tại sao tất cả các dịch vụ đều lưu mật khẩu của user dưới dạng hash.
    • xoai
      @tkm Đúng bản chất là các dịch vụ đều chỉ so sánh hash để xác thực thôi chứ không cần phải decrypt hoàn toàn password. Vấn đề ở đây là cái password đó chỉ lưu trong máy client, chứ không lưu ở đâu trên hệ thống của Finsify cả. Rủi ro là nếu app bị crack và mò ra được master password + cơ chế mã hóa.
    • katanoha
      @TKM em thấy phương pháp serverless này cơ bản có vẻ ổn đấy chứ ạ. Còn việc lấy được encrypted pass bên local của user thì do thiết bị user nhiễm mã độc, lấy luôn lúc nhập internet banking bằng trình duyệt cũng dc nữa ấy chứ. Vì ở đây cần pass để login crawl dữ liệu nên lưu dạng hash không khả thi dc, trừ khi bên bank cũng phải hỗ trợ để login pass dạng hash (dĩ nhiên nếu tốt đến mức bank có api thì khỏi bàn )
    • TKM
      @xoai Thực ra bạn founder so sánh cơ chế lưu passwd hiện tại với Lastpass là khá chuẩn rồi. Tuy nhiên ở đây rõ ràng là các bạn ấy nên sử dụng bank API, thì sẽ an toàn hơn nhiều.
    • goodlink
      @xoai mình có xem 1 vài app của bank thì dữ liệu không lưu local luôn mà lưu trên RAM (?) nên khi logout thì các dữ liệu đã tải về cũng bị xóa. Gọi là Clientless nhỉ?
    • TanNg
      @xoai Password không lưu trên server thì không crawl dữ liệu được khi không mở apps.
    • xoai
      @tanng Yep. Nhược điểm của kiến trúc này (cái này là em đoán chứ không chắc ML làm y hệt 100%) là như vậy. Tuy nhiên em nghĩ việc quản lý chi tiêu đa phần là nhìn vào dữ liệu quá khứ và áp lực real time không quá cao (bác nào cắm tài khoản chơi chứng khoán hay Forex thì bó tay hehe).

      Hiện tại đa phần các hãng (Apple, Whatsapp, Telegram,...) đều áp dụng end-to-end encrypt, gần như chẳng lưu cái gì trên hệ thống cả, tất cả để hết ở client.

      Anyway, có 1 chút vấn đề về security ở đây đó là password (password ngân hàng) chắc chắn được mã hóa ở dạng có decryptable dẫn đến việc cần phải quản lý cái key để decrypt (mà cũng dự là không có chuyện chung nhau 1 cái master key mà mỗi user 1 key).

      Cái này thì liên quan đến cơ chế quản lý nội bộ của ML để không một cá nhân nào có thể dễ dàng tiếp cận key để thực hiện việc lấy password của user. Kể cả khi cần debug cũng phải có cơ chế xác thực, cách ly, giám sát để không làm bậy.

      Nói chung là chờ ML ra một cái whitepaper kỹ hơn về kỹ thuật để tăng sự minh bạch và niềm tin của user.
    • TanNg
      @xoai Dịch vụ là aggregator nên dữ liệu phải crawl trước để tính toán, chuẩn bị sẵn. Anh nghĩ là lưu pass trên server có thể chấp nhận được, nhưng cần công khai, minh bạch để user ý thức được việc họ làm, các chuyên gia ở bên ngoài nhìn vào và đánh giá được rủi ro. Đây là dịch vụ liên quan tới bank nên an toàn và bảo mật là thứ được đòi hỏi cao độ, càng công khai minh bạch thì càng được tin tưởng hơn. Hiện tại chắc chắn có sơ hở, nhưng đó là điều chấp nhận được, nếu thừa nhận và sửa thì sẽ tốt hơn rất nhiều việc kiên quyết khẳng định là tôi tuyệt đối an toàn.
    • TKM
      @tanng Chuẩn rồi, công khai rõ hết ra, các chuyên gia sẽ đánh giá, và người dùng sẽ quyết định có dùng hay không, dựa trên tương quan giữa sự tiện dụng và rủi ro.
    • viet2nt
      @xoai
      Amazon Lambda chỉ chưa bộ code thực thi của Finsify. Bộ code này sẽ decrypt username & password


      vậy so sánh với lastpass về độ an toàn là ko chính xác? bản thân lastpass ko decrypt được u&p của user (trên server)
  • TKM
    Có ai nghĩ ra các bạn ấy làm thế nào để vượt qua captcha khi đăng nhập Internet banking không nhỉ? (VD: Vietcombank IB).
    Liệu có phải cơ chế captcha của bank quá yếu?
Website liên kết