Nowość – przenieś przetwarzanie płatności do chmury dzięki AWS Payment Cryptography

13 listopada 2023

Kryptografia jest obecna wszędzie w naszym codziennym życiu. Jeśli regularnie czytasz blog AWS, używasz protokołu HTTPS, rozszerzenia protokołu HTTP, które wykorzystuje szyfrowanie do zabezpieczania komunikacji.

W AWS wiele usług i możliwości pomaga zarządzać kluczami i szyfrowaniem, takich jak:

  • AWS Key Management Service (AWS KMS), za pomocą której można tworzyć i chronić klucze do szyfrowania lub cyfrowego podpisywania danych;
  • AWS CloudHSM, którego można używać do zarządzania sprzętowymi modułami bezpieczeństwa (HSM) przeznaczonymi dla jednego dzierżawcy.

Moduły HSM to urządzenia fizyczne, które w bezpieczny sposób chronią operacje kryptograficzne i klucze używane podczas tych operacji. HSM mogą pomóc Ci spełnić wymagania dotyczące zgodności korporacyjnej, umownej i regulacyjnej. Dzięki CloudHSM masz dostęp do modułów HSM ogólnego przeznaczenia. W przypadku płatności istnieją specjalne moduły HSM płatnicze, które oferują takie możliwości, jak generowanie i sprawdzanie osobistego numeru identyfikacyjnego (PIN) oraz kodu zabezpieczającego karty kredytowej lub debetowej.

Dziś autorzy z radością udostępniają dostępność AWS Payment Cryptography, elastycznej usługi zarządzającej modułami płatniczymi HSM i kluczami do aplikacji przetwarzających płatności w chmurze.

Aplikacje wykorzystujące moduły HSM do płatności mają duże wymagania, ponieważ przetwarzanie płatności jest złożone, wrażliwe na czas i podlega ścisłym regulacjom oraz wymaga interakcji wielu dostawców usług finansowych i sieci płatniczych. Za każdym razem, gdy dokonujesz płatności, dane są wymieniane między dwoma lub większą liczbą dostawców usług finansowych i na każdym etapie muszą zostać odszyfrowane, przekształcone, zaszyfrowane lub sprawdzone.

Proces ten wymaga wysoce wydajnych możliwości kryptograficznych i procedur zarządzania kluczami pomiędzy każdym dostawcą usług płatniczych. Dostawcy ci mogą mieć tysiące kluczy do ochrony, zarządzania, rotacji i audytu, co sprawia, że cały proces jest kosztowny i trudny do skalowania. Co więcej, moduły HSM ds. płatności tradycyjnie stosują złożone i podatne na błędy procesy, takie jak wymiana kluczy przy użyciu kluczowych elementów wydrukowanych na papierze, przesyłanych osobno do wielu kluczowych depozytariuszy, którzy ostatecznie łączą komponenty w ramach skomplikowanego procesu w bezpiecznym miejscu.

Poznaj AWS Payment Cryptography 

AWS Payment Cryptography upraszcza wdrażanie funkcji kryptograficznych i zarządzanie kluczami używanymi do zabezpieczania danych podczas przetwarzania płatności zgodnie z różnymi standardami branży kart płatniczych (PCI).

Dzięki AWS Payment Cryptography możesz wyeliminować potrzebę udostępniania i zarządzania lokalnymi modułami płatniczymi HSM oraz korzystać z dostarczonych narzędzi, aby uniknąć podatnych na błędy procesów wymiany kluczy. Na przykład dzięki kryptografii płatności AWS dostawcy usług płatniczych i finansowych mogą rozpocząć rozwój w ciągu kilku minut i zaplanować elektroniczną wymianę kluczy, eliminując procesy ręczne.

Aby zapewnić elastyczne możliwości kryptograficzne w sposób zgodny z przepisami, AWS Payment Cryptography wykorzystuje moduły HSM z potwierdzeniem urządzenia PCI PTS HSM. Możliwości te obejmują szyfrowanie i deszyfrowanie danych karty, tworzenie kluczy i translację pinów. AWS Payment Cryptography jest również zaprojektowany zgodnie ze standardami bezpieczeństwa PCI, takimi jak PCI DSS, PCI PIN i PCI P2PE i zapewnia dowody i raporty pomagające spełnić Twoje potrzeby w zakresie zgodności.

Możesz importować i eksportować klucze symetryczne między usługą AWS Payment Cryptography a lokalnymi modułami HSM w ramach klucza szyfrowania klucza (KEK) przy użyciu protokołu ANSI X9 TR-31. Można również importować i eksportować symetryczne KEK z innymi systemami i urządzeniami wykorzystując protokół ANSI X9 TR-34, który umożliwia usłudze wymianę kluczy symetrycznych przy użyciu technik asymetrycznych.

Aby uprościć przeniesienie przetwarzania płatności konsumenckich do chmury, istniejące aplikacje do płatności kartami mogą korzystać z kryptografii płatności AWS za pośrednictwem pakietów AWS SDK. W ten sposób możesz używać swojego ulubionego języka programowania, takiego jak Java lub Python, zamiast specyficznych dla dostawcy interfejsów ASCII za pośrednictwem gniazd TCP, jak to jest powszechne w przypadku płatniczych modułów HSM.

Dostęp można autoryzować za pomocą zasad opartych na tożsamości AWS Identity and Access Management (IAM), w których można określić, które działania i zasoby są dozwolone, a które zabronione oraz na jakich warunkach.

Monitorowanie jest ważne dla utrzymania niezawodności, dostępności i wydajności wymaganej do przetwarzania płatności. Dzięki AWS Payment Cryptography możesz używać Amazon CloudWatch, AWS CloudTrail i Amazon EventBridge, aby zrozumieć, co się dzieje, zgłosić, gdy coś jest nie tak, i w razie potrzeby podjąć automatyczne działania.

Sprawdźmy, jak to działa w praktyce.

Użycie AWS Payment Cryptography

Korzystając z interfejsu wiersza poleceń AWS (AWS CLI), utwórz klucz 3DES o podwójnej długości, który ma być używany jako klucz weryfikacji karty (CVK). CVK to klucz używany do generowania i weryfikacji kodów bezpieczeństwa kart, takich jak CVV, CVV2 i podobne wartości.

Należy pamiętać, że istnieją dwa polecenia dla interfejsu CLI (i podobnie dwa punkty końcowe dla interfejsu API i zestawów SDK):

  • kryptografia płatności dla operacji na płaszczyźnie kontrolnej, takich jak wyświetlanie i tworzenie kluczy i aliasów.
  • dane-kryptograficzne-płatnicze do operacji kryptograficznych wykorzystujących klucze, na przykład do generowania PIN-u lub danych potwierdzających ważność karty.

Tworzenie klucza jest operacją na płaszczyźnie sterującej:

aws payment-cryptography create-key \
    --no-exportable \
    --key-attributes KeyAlgorithm=TDES_2KEY,
                     KeyUsage=TR31_C0_CARD_VERIFICATION_KEY,
                     KeyClass=SYMMETRIC_KEY,
                     KeyModesOfUse='{Generate=true,Verify=true}'
{
    "Key": {
        "KeyArn": "arn:aws:payment-cryptography:us-west-2:123412341234:key/42cdc4ocf45mg54h",
        "KeyAttributes": {
            "KeyUsage": "TR31_C0_CARD_VERIFICATION_KEY",
            "KeyClass": "SYMMETRIC_KEY",
            "KeyAlgorithm": "TDES_2KEY",
            "KeyModesOfUse": {
                "Encrypt": false,
                "Decrypt": false,
                "Wrap": false,
                "Unwrap": false,
                "Generate": true,
                "Sign": false,
                "Verify": true,
                "DeriveKey": false,
                "NoRestrictions": false
            }
        },
        "KeyCheckValue": "B2DD4E",
        "KeyCheckValueAlgorithm": "ANSI_X9_24",
        "Enabled": true,
        "Exportable": false,
        "KeyState": "CREATE_COMPLETE",
        "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
        "CreateTimestamp": "2023-05-26T14:25:48.240000+01:00",
        "UsageStartTimestamp": "2023-05-26T14:25:48.220000+01:00"
    }
}

Aby odwołać się do tego klucza w kolejnych krokach, możesz użyć nazwy zasobu Amazon (ARN) znalezionej we właściwości KeyARN lub możesz utworzyć alias. Alias to przyjazna nazwa, która pozwala odwołać się do klucza bez konieczności używania pełnego ARN. Możesz zaktualizować alias, aby odnosił się do innego klucza. Kiedy musisz wymienić klucz, możesz po prostu zaktualizować alias bez konieczności zmiany konfiguracji lub kodu aplikacji. Aby nazwy aliasów były łatwe do rozpoznania, zaczynają się one od alias/. Na przykład poniższe polecenie tworzy alias/my-key dla właśnie utworzonego klucza:

aws payment-cryptography create-alias --alias-name alias/my-key \
    --key-arn arn:aws:payment-cryptography:us-west-2:123412341234:key/42cdc4ocf45mg54h

JSON
{ "Alias": { "AliasName": "alias/my-key", "KeyArn": "arn:aws:payment-cryptography:us-west-2:123412341234:key/42cdc4ocf45mg54h" } }

Zanim zaczniesz używać nowego klucza, spisz wszystkie swoje klucze, aby sprawdzić ich status:

aws payment-cryptography list-keys
{
    "Keys": [
        {
            "KeyArn": "arn:aws:payment-cryptography:us-west-2:123421341234:key/42cdc4ocf45mg54h",
            "KeyAttributes": {
                "KeyUsage": "TR31_C0_CARD_VERIFICATION_KEY",
                "KeyClass": "SYMMETRIC_KEY",
                "KeyAlgorithm": "TDES_2KEY",
                "KeyModesOfUse": {
                    "Encrypt": false,
                    "Decrypt": false,
                    "Wrap": false,
                    "Unwrap": false,
                    "Generate": true,
                    "Sign": false,
                    "Verify": true,
                    "DeriveKey": false,
                    "NoRestrictions": false
                }
            },
            "KeyCheckValue": "B2DD4E",
            "Enabled": true,
            "Exportable": false,
            "KeyState": "CREATE_COMPLETE"
        },
        {
            "KeyArn": "arn:aws:payment-cryptography:us-west-2:123412341234:key/ok4oliaxyxbjuibp",
            "KeyAttributes": {
                "KeyUsage": "TR31_C0_CARD_VERIFICATION_KEY",
                "KeyClass": "SYMMETRIC_KEY",
                "KeyAlgorithm": "TDES_2KEY",
                "KeyModesOfUse": {
                    "Encrypt": false,
                    "Decrypt": false,
                    "Wrap": false,
                    "Unwrap": false,
                    "Generate": true,
                    "Sign": false,
                    "Verify": true,
                    "DeriveKey": false,
                    "NoRestrictions": false
                }
            },
            "KeyCheckValue": "905848",
            "Enabled": true,
            "Exportable": false,
            "KeyState": "DELETE_PENDING"
        }
    ]
}

Jak widać, istnieje inny klucz, który utworzyłeś wcześniej, ale który został usunięty. Gdy klucz zostanie usunięty, zostaje on oznaczony do usunięcia (DELETE_PENDING). Rzeczywiste usunięcie następuje po konfigurowalnym okresie (domyślnie 7 dni). Jest to mechanizm zabezpieczający zapobiegający przypadkowemu lub złośliwemu usunięciu klucza. Klucze oznaczone do usunięcia nie są dostępne do użycia, ale można je przywrócić.

W podobny sposób wymień wszystkie swoje aliasy, aby zobaczyć, do jakich kluczy się odnoszą:

aws payment-cryptography list-aliases
JSON
{
    "Aliases": [
        {
            "AliasName": "alias/my-key",
            "KeyArn": "arn:aws:payment-cryptography:us-west-2:123412341234:key/42cdc4ocf45mg54h"
        }
    ]
}

Teraz użyj klucza do generowania kodu bezpieczeństwa karty z systemem uwierzytelniania CVV2. Być może znasz numery CVV2, które zwykle są zapisane na odwrocie karty kredytowej. W ten sposób są one obliczane. Jako dane wejściowe podaj podstawowy numer konta karty kredytowej, datę ważności karty oraz klucz z poprzedniego kroku. Aby określić klucz, użyj jego aliasu. To jest operacja na płaszczyźnie danych:

aws payment-cryptography-data generate-card-validation-data \
    --key-identifier alias/my-key \
    --primary-account-number=171234567890123 \
    --generation-attributes CardVerificationValue2={CardExpiryDate=0124}
{
    "KeyArn": "arn:aws:payment-cryptography:us-west-2:123412341234:key/42cdc4ocf45mg54h",
    "KeyCheckValue": "B2DD4E",
    "ValidationData": "343"
}

Zwróć uwagę na trzy cyfry we właściwości ValidationData. Realizując płatność, możesz sprawdzić, czy wartość danych karty jest prawidłowa:

aws payment-cryptography-data verify-card-validation-data \
    --key-identifier alias/my-key \
    --primary-account-number=171234567890123 \
    --verification-attributes CardVerificationValue2={CardExpiryDate=0124} \
    --validation-data 343
{
    "KeyArn": "arn:aws:payment-cryptography:us-west-2:123412341234:key/42cdc4ocf45mg54h",
    "KeyCheckValue": "B2DD4E"
}

Weryfikacja przebiegła pomyślnie, a w zamian otrzymujesz tę samą wartość KeyCheckValue, co przy wygenerowaniu danych walidacyjnych.

Jak można się spodziewać, jeśli użyjesz błędnych danych weryfikacyjnych, weryfikacja nie powiedzie się i pojawi się błąd:

aws payment-cryptography-data verify-card-validation-data \
    --key-identifier alias/my-key \
    --primary-account-number=171234567890123 \
    --verification-attributes CardVerificationValue2={CardExpiryDate=0124} \
    --validation-data 999

An error occurred (com.amazonaws.paymentcryptography.exception#VerificationFailedException)
when calling the VerifyCardValidationData operation:
Card validation data verification failed

 W konsoli AWS Payment Cryptography wybierz opcję View Keys, aby wyświetlić listę kluczy.

AWS Payment Cryptography

Opcjonalnie możesz włączyć więcej kolumn, aby np. zobaczyć typ klucza (symetryczny/asymetryczny) i zastosowany algorytm.

AWS Payment Cryptography

Wybierz klucz, którego użyłeś w poprzednim przykładzie, aby uzyskać więcej szczegółów. Tutaj widać konfigurację kryptograficzną, znaczniki przypisane do klucza i aliasy odnoszące się do tego klucza.

AWS Payment Cryptography keys

AWS Payment Cryptography obsługuje o wiele więcej operacji niż te, które tutaj zaobserwowałeś. W tym przewodniku użyto interfejsu wiersza polecenia AWS. W swoich aplikacjach możesz używać kryptografii płatności AWS za pośrednictwem dowolnego zestawu SDK AWS.

Dostępność i koszty

AWS Payment Cryptography jest już dostępna w następujących regionach AWS: Wschodnie Stany Zjednoczone (płn. Wirginia) i Zachodnie Stany Zjednoczone (Oregon).

Dzięki AWS Payment Cryptography płacisz tylko za to, czego używasz, na podstawie liczby aktywnych kluczy i wywołań API, bez żadnych zobowiązań z góry ani opłat minimalnych. Aby uzyskać więcej informacji, zapoznaj się z AWS Payment Cryptography pricing.

AWS Payment Cryptography usuwa zależność od dedykowanych modułów płatniczych HSM i starszych systemów zarządzania kluczami, upraszczając integrację z natywnymi interfejsami API AWS. Ponadto, obsługując całą aplikację płatniczą w chmurze, możesz zminimalizować obustronną komunikację i  potencjalne opóźnienia.

źródło: AWS

 

 

Case Studies
Referencje

Jesteśmy ogromnie zadowoleni ze współpracy z firmą Hostersi. Ich specjaliści doradzili nam rozwiązanie, które dało nam stabilną, skalowalną infrastrukturę, która umożliwia obsłużenie ciągle rosnącego ruchu związanego z COVID-19

Jakub Sperczyński
Prezes Zarządu EduNect
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.